Параллельные ui-тесты в Selenide

Как-то раз решал задачу распараллеливания прогона ui-тестов, написанных на TestNG и Selenide. Оказалось все довольно просто, но есть нюансы.

Итак, на входе имеем сьют-файл testng.xml и базовый класс для тестов. Запускаем в Chrome в несколько потоков отдельными классами.

Для начала убедимся, что в зависимостях проекта числится selenide-testng, тк из него нам понадобится тест лисенер com.codeborne.selenide.testng.BrowserPerClass. Его-то мы и укажем в аннотации @Listeners в базовом классе или в testng.xml:

<suite name="Demo" parallel="classes" thread-count="3"> <listeners> <listener class-name="com.codeborne.selenide.testng.BrowserPerClass" /> </listeners> … </suite>

Тут мы также включаем распараллеливание по классам (в 3 потока). Настройки для упорядочивания тестов (preserve-order, group-by-instance) придется отключить, иначе не заработает параллельность.

После проведенных манипуляций тест классы запустятся в отдельных тредах и Selenide создаст отдельный WebDriver для каждого потока (то есть вы увидите три окна браузера).

Вы также можете указать ChromeDriver (или любой другой) со своими кастомными настройками, передав его в вызов статик метода WebDriverRunner.setWebDriver(…) в before-class методе.

После этого остается только закрыть WebDriver в after-class методе:

@AfterClass public void afterClass() { WebDriverRunner.closeWebDriver(); }

Чего не следует делать, так это использовать сложные депенденси между тестами. Такой случай разбирается в тикете: https://github.com/selenide/selenide/issues/668

Кому интересно, есть еще стратегия BrowserPerTest (для самостоятельного изучения).

На этом пока все. Зеленых вам прогонов 😉

#параллельныетесты #selenide #testng #uitests #paralleltests