Запуск тестов с помощью Jenkins

Настройка Jenkins.
Запуск jenkins в docker описан в этой статье
В настройках дженкинса переходим в Global Tool Configuration.
- Добавляем Maven.
Настройка Jоb’a.
- Создаем новый item.
- Разрешить параллельный запуск задачи.
- Выбираем “параметризованная сборка” и добавляем два String параметра: BROWSER, DEVICE, HUB, THREAD. (Значение по дефолту chrome, pc, http://192.168.1.155:4444/wd/hub, 3).
Запускаем Selenium Grid

Что такое Seleium Grid?
Selenium Grid – это кластер, включающий в себя несколько Selenium-серверов. Решает следующие задачи:
- Распараллеливание запуска тестов на различных операционных системах, в различных браузерах на разных машинах.
- Общее время прогона тестов.
Selenium Grid работает следующим образом: имеется центральный сервер (hub), к которому подключены узлы (node). Работа с кластером осуществляется через hub, при этом он просто транслирует запросы узлам. Узлы могут быть запущены на той же машине, что и hub или на других.
Начало работы с grid’ом.
- Скачать Selenium Server Standalone c оф. сайта selenium.
Jenkins в контейнере

Запускаем Jenkins.
Jenkins мощный инструмент, с его помощью выстраивают процесс Continuous Integration (CI). Docker позволяет “упаковать” приложение со всем его окружением и зависимостями в контейнер. В таком контейнере и будет “жить” Jenkins. Большим плюсом такой связки (Jenkins + Docker) будет, что Jenkins поднимится автоматически (вместе с докером), если машина на которой он был перезагрузилась (или другие проблемы). Начнем:
Запуск тестов в несколько потоков с помощью TestNG
TestNG.xml
Запуск тестов в несколько потоков значительно сокращает время прогона. Связано это с тем, что на каждый поток/thread создается свой WebDriver и поднимается браузер. TestNG позволяет создать test suite, указать тесты и количество потоков.
Достаем Properties из Maven profiles в Java код.
Создаем Maven profile
Profile используется для сборки проекта с разными настройками. Напишем профайлы, которые помогу нам запускать тесты в разных браузерах. Добавим этот код в pom.xml.
<profiles>
<profile>
<id>Chrome</id>
<properties>
<browser>chrome</browser>
</properties>
</profile>
</profiles>Page object pattern и BaseTest
Зачем нужны Page и BaseTest классы?
Рассмотрим простой тест:
public class OurFirstTest {
@BeforeTest
private void settings() {
Configuration.browser = "chrome";
}
@Test
public void checkSecondPageAboutText() {
open("https://ereoo.github.io/main-page");
$(By.id("go_second")).click();
$(By.id("about")).shouldHave(text("This is second test page \"SecondPage\". First test page is \"MainPage\". This is a test page filled with common HTML elements. Feel free to practice create your auto-tests."));
}
@AfterTest
private void close() {
getWebDriver().close();
}
}Автоматизированный тест с Selenide и TestNG
Подключение TestNG и Selenide.
Создаем обычный Maven проект. В pom.xml добавляем dependencies.
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>4.9.1</version>
<scope>test</scope>
</dependency>
</dependencies>