Параллельные 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