2014-10-29 2 views
10

я сталкиваюсь со следующей проблемой: я создал два класса, которые включают в себя @Tests с атрибутом приоритета:Приоритет в TestNG с несколькими классами

@Test(priority = 1) 
public void testA1() { 
    System.out.println("testA1"); 
} 

@Test(priority = 2) 
public void testA2() { 
    System.out.println("testA2"); 
} 

@Test(priority = 3) 
public void testA3() { 
    System.out.println("testA3"); 
} 

... и ...

@Test(priority = 1) 
public void testB1() { 
    System.out.println("testB1"); 
} 

@Test(priority = 2) 
public void testB2() { 
    System.out.println("testB2"); 
} 

@Test(priority = 3) 
public void testB3() { 
    System.out.println("testB3"); 
} 

я поставил оба класса в рамках одного теста в testng.xml, но когда я запускаю тест, он прикажет мой @Tests на основе приоритетов, из обоих классов:

testA1 
testB1 
testA2 
testB2 
testA3 
testB3 

Я ожидаю, что следующий результат:

testA1 
testA2 
testA3 
testB1 
testB2 
testB3 

Мой вопрос заключается в том, что, как я могу предотвратить приказать мои @Tests на основе обоих классов и запустить @Tests только из одного класса в то же время?

ответ

14

В вашей ванной использования XML-группы по-экземпляры = "истинной"

образца, где TestClass1 и TestClass2 имеет то же содержание, как ваш

<suite thread-count="2" verbose="10" name="testSuite" parallel="tests"> 
<test verbose="2" name="MytestCase" group-by-instances="true"> 
    <classes> 
     <class name="com.crazytests.dataproviderissue.TestClass1" /> 
     <class name="com.crazytests.dataproviderissue.TestClass2" /> 
    </classes> 
</test> 
</suite> 

я получить выход

testA1

testA2

testA3

testB1

testB2

testB3

+1

Спасибо, он отлично работает для меня в моем примере кода тоже :) Но знаете ли вы, может быть, как передать этот параметр testng.xml программно? Я попробовал «setGroupByInstances (true)», но это не сработало. – peetya

+0

У меня нет xml ... как установить это на Java? – sebnukem

+0

К peetya: Я думаю, что очень важно установить setGroupByInstances (true) в нужном месте ... как в примере, он находится в элементе «Test», поэтому: XmlTest test = новый XmlTest (набор); test.setGroupByInstances (true); – Androdos

1

Вам не нужно использовать XML, вы можете просто предоставить @Test(testName="test1")/@Test(testName="test2") в верхней части каждого класса, и приоритеты будут автоматически сгруппированы по классам.

+0

Можете ли вы дать testng.xml для этого? Один пример – Sagar007

+0

@ Sagar007 Я не использовал testng.xml вообще –

+0

Но я хочу работать с testng xml. Это возможно ? У меня 3 класса, и я хочу дать последовательность. – Sagar007

0

вы должны изменить приоритет на тесте B , чтобы быть, как это

@Test(priority = 4) 
    public void testB1() { 
     System.out.println("testB1"); 
    } 

    @Test(priority = 5) 
    public void testB2() { 
     System.out.println("testB2"); 
    } 

    @Test(priority = 6) 
    public void testB3() { 
     System.out.println("testB3"); 
    } 

и без каких-либо изменений для XML, так как он работает в качестве приоритета

0

Самый правильный способ заключается в использовании dependsOnMethods. Уровни приоритета являются глобальными для тестирования (не смешивайте с тестовыми методами, которые аннотируются с помощью @Test). Другими словами: при тестировании testng (от тега <test>) он группирует методы по приоритетам, а затем запускает их. В вашем случае оба testA1 и testB1 имеют приоритет = 1, поэтому будут выполняться в начале.

Смежные вопросы