Приоритет в 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, поэтому будут выполняться в начале.