2015-11-10 7 views
3

Мой вопрос больше связан со структурой/чистотой. У меня есть тестовый скрипт в TestNG, и я хочу добавить тестовые примеры для расширения. Я хочу знать, есть ли чистый способ повторить тесты. Пример:Есть ли более чистый способ структурирования тестовых случаев TestNG?

я могу сделать:

@Test(priority=0, name = login) 
//some code 

@Test(priority=2, name = submit) 
//some code 

@Test(priority=3, name = accept) 

Это только один тестовый сценарий. Теперь я хочу сделать то же самое для другого потока, но тест повторяется ... пример:

@Test(priority=0, name = login) 
//some code 

@Test(priority=2, name = submit) 
//some code 

@Test(priority=3, name = rejected) 

В обоих потоках, 2 испытания та же, где я повторяю логин и нажмите кнопку. Единственное изменение в потоке - это то, что происходит каждый раз после отправки, например, «Отправить», «Отклонить», «Отменить» и т. Д. И т. Д. Я знаю только один способ, и это нужно повторять, записывая логин и отправляя каждый раз.

Вопрос в том, есть ли более/более структурированный способ написать это вместо ниже, где я постоянно повторяю логин?

@Test(priority=0, name = login) 
//some code 

@Test(priority=2, name = submit) 
//some code 

@Test(priority=3, name = accept) 
//Some code 

@Test(priority=4, name = login) 
//some code 

@Test(priority=5, name = submit) 
//some code 

@Test(priority=6, name = rejected) 
//some code 
. 
. 
. 
@Test(priority=n ... 

ответ

0

Если ваша цель устранить дублирование испытаний, как о создании более invidualized тестов и запускать их несколько раз, указав это в testng.xml file?

Например, вы могли бы сделать:

<?xml version="1.0" encoding="UTF-8"?> 

<suite name="Test Suite 1"> 
    <test name="Test Set 1"> 
     <classes> 
      <class name="test.mytest.Test1" /> 
      <class name="test.mytest.Test2" /> 
     </classes> 
    </test> 
    <test name="Test Set 2"> 
     <classes> 
      <class name="test.mytest.Test1" /> 
      <class name="test.mytest.Test3" /> 
     </classes> 
    </test> 
</suite> 

С ваших классов, созданных как:

public class Test1 { 

    @BeforeMethod 
    public void before(){ 
     System.out.println("==Before method=="); 
    } 

    @Test 
    public void testLogin(){ 
     System.out.println("test login"); 
    } 

    @Test 
    public void testSubmit(){ 
     System.out.println("test submit"); 
    } 

} 

public class Test2 { 

    @Test 
    public void testAccept(){ 
     System.out.println("test accept"); 
    } 

} 

public class Test3 { 

    @Test 
    public void testReject(){ 
     System.out.println("test reject"); 
    } 

} 

При запуске (я использовал Maven в моем примере), будет производить:

Running TestSuite 
==Before method== 
test login 
==Before method== 
test submit 
test accept 
==Before method== 
test login 
==Before method== 
test submit 
test reject 
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.253 sec - in TestSuite 

Для этого примера я организовал их по классам, но вы могли бы организовать группу, метод и т. Д.

EDIT Основываясь на вашем комментарии, я добавил пример использования @BeforeMethod и полученного результата.

Если вы хотите повторно использовать специально @BeforeMethod, я полагаю, вы всегда можете просто бросить его в базовый класс и ваши тестовые случаи продлить его:

public class TestBase { 

    @BeforeMethod 
    public void before(){ 
     System.out.println("==Before method=="); 
    } 
} 

public class Test1 extends TestBase{ 

    @Test 
    public void testLogin(){ 
     System.out.println("test login"); 
    } 

    @Test 
    public void testSubmit(){ 
     System.out.println("test submit"); 
    } 

} 

Я никогда не должен был сделать что-то так что я не могу говорить с ней с точки зрения передового опыта, но это сработает.

+0

Похоже, что это решит то, что мне нужно для этого. Хотя, следующий вопрос: где будет использоваться метод beforeMethod? –

+0

Я не уверен, для чего вы его используете, поэтому трудно сказать, куда он должен идти в вашем конкретном случае. Я изменил свой ответ, чтобы показать образец использования @BeforeMethod и результат, который он будет производить. –

+0

безупречный. это именно то, что я искал. –

0

Будет ли это работать?

public class BeforeStuff { 
@BeforeMethod() 
} 

public class Test1 { 
    @Test 
    @Test 
} 

public class Test2 { 
    @Test 
} 

public class Test3 { 
    @Test 
    } 
} 
Смежные вопросы