Параллельный запуск UI тестов (testng + maven)

Доброго дня. В связи с увеличением покрытия тестов появилась мысль попробовать их распараллелить. Нахожусь пока на стадии сбора информации. :slight_smile:

Немного о запуске:
Запускаем тесты в основном только под chromedriver последних версий. Редко используем иные браузеры, но в далеком будущем хотелось бы иметь выбор.
Используем TC, агенты которого динамичны. При запросе поднимаются с нужным build env.
Соответственно, все тесты будут запускаться на одного агенте в несколько потоков. Количество потоков хотелось бы регулировать.

Главное требование: чтобы тесты внутри тестового класса запускались последовательно.
Немного о проекте. Используем собственную обвязку над selenide.
Пример testng.xml:

> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Functional Tests (full pack)" parallel="false" configfailurepolicy="continue">
    <test name="1" preserve-order="true" enabled="true">
        <classes>
            <class name="1" />
        </classes>
    </test>
    <test name="2" preserve-order="true">
        <parameter name="tms.test.code" value="2"/>
        <classes>
            <class name="2.test1"/>
            <class name="2.test2"/>
        </classes>
    </test>
    

Пример одного из тестовых классов, кейсы внутри которого должны запускаться последовательно:

public class 2 extends someclass{

	public constr() {
		user = "user";
		password = "password";
	}

	@Test(testName = "test 1", priority = 1, alwaysRun = true)
	public void test1() {
//
	}

	@Test(testName = "test 2", priority = 2, alwaysRun = true)
	public void orderBasedAndMiscTransaction() {
//
	}

Жду ваших советов, вопросов и предложений. Спасибо. :slight_smile:

Для параллельности сразу посмотрите в сторону Selenoid + GGR (Go Grid Router)
Он и с покрытием браузеров поможет. И видео тестов запишет.

Последовательный запуск тестов одного класса обеспечивается настройками TestNG (xmlSuite.setParallel(XmlSuite.ParallelMode.CLASSES))
Есть нюансы с запуском тестов с дата провайдерами. Если столкнётесь, спрашивайте.

Количество потоков регулируется тем же TestNG (xmlSuite.setThreadCount(<желаемое количество потоков>) + xmlSuite.setDataProviderThreadCount(<желаемое количество потоков для дата провайдеров>))

Также позаботьтесь о переводе драйвера на ThreadLocal многопоточность - Зачем нужен класс ThreadLocal в Java? - Stack Overflow на русском

3 лайка
    @Test
    public void runAllTests() {
        Class<?>[] classes = { ParallelTest1.class, ParallelTest2.class };

        // ParallelComputer(true,true) will run all classes and methods 
        // in parallel.  (First arg for classes, second arg for methods)
        JUnitCore.runClasses(new ParallelComputer(true, true), classes);
    }

Як варіант можна аикористати maven-surefire-plugin, в нього передати TestNG .xml файл з тестами які потрібно виконати. Паралельність і кількість потоків вказується в цьому .xml-і:

<suite name="Suite" parallel="methods" thread-count="5">
    <test name="Test">
        <classes>
            <class name="tests.FirstParallelTest" />
        </classes>
    </test>
</suite>

Добрый день. Есть ли возможность параллельного запуска, нескольких секций test из testng.xml, одновременно? У меня при такой настройке, секции test выполняются в разных потоках. Но выполняются не одновременно, а последовательно. Сначала первая, затем вторая. Буду благодарен за помощь.

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="All tests" thread-count="2" parallel="tests">
    <test name="test thread 1">
        <groups>
            <run>
                <include name="test"/>
            </run>
        </groups>
        <classes>
            <class name="com.OneTest"/>
        </classes>
    </test>
    <test name="test thread 2">
        <groups>
            <run>
                <include name="test"/>
            </run>
        </groups>
        <classes>
            <class name="com.TwoTest"/>
        </classes>
    </test>
</suite>

Тут зависит от количества запускаемых браузеров и ОС на которых нужно запускать. Нам пока и selenoid хватает, без ggr.

поделитесь пожалуйста примером реализации. сейчас также нахожусь на стадии сбора информации. Спасибо)