Приоритет в TestNG с несколькими классами
Я столкнулся со следующей проблемой: я создал два класса, которые включают @Tests с атрибутом priority:
@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 только из одного класса одновременно?
Ответы
Ответ 1
В вашем пакете xml используйте group-by-instance = "true"
Пример, где 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
Ответ 2
Вам не нужно использовать xml, вы можете просто предоставить @Test(testName="test1") / @Test(testName="test2")
в верхней части каждого класса, а приоритеты будут автоматически сгруппированы для каждого класса.
Ответ 3
вы должны изменить приоритет на 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, поскольку он работает как приоритет
Ответ 4
Самый правильный способ - использовать dependOnMethods.
Уровни приоритета являются глобальными для тестирования (не смешивайте с тестовыми методами, которые аннотируются с помощью @Test). Другими словами:
когда testng запускает тест (из тега <test>
), он группирует методы по приоритетам и затем запускает его. В вашем случае оба testA1 и testB1 имеют приоритет = 1, поэтому будут выполняться в начале.