CI/CD и Jenkins в современном тестировании

🔥 Важное для QA-специалистов! 🔥
В QaRocks ты найдешь туториалы, задачи и полезные книги, которых нет в открытом доступе. Уже более 16.000 подписчиков – будь среди нас! Заходи к нам в телеграм канал QaRocks

В современной быстро меняющейся среде разработки обеспечение непрерывного тестирования веб-приложений имеет решающее значение для создания высококачественного программного обеспечения. В данной статье мы рассмотрим интеграцию тестов Selenium Java в конвейеры Jenkins для непрерывной интеграции (CI). Вы узнаете, как настроить среду, написать Selenium-тесты и управлять ими, настроить пайплайны Jenkins, автоматически запускать тесты при изменении кода, генерировать отчеты и следовать лучшим практикам для эффективной автоматизации тестирования.

Роль CI/CD и Jenkins в автоматизации тестирования

Что такое CI/CD?

Непрерывная интеграция (Continuous Integration, CI) — это практика разработки, при которой разработчики часто вносят изменения кода в общий репозиторий. Каждая интеграция может быть проверена автоматизированной сборкой и автотестами. Это помогает быстро обнаружить ошибки, повысить качество программного обеспечения и сократить время выпуска обновлений.

Непрерывная доставка (CD) расширяет непрерывную интеграцию (CI), обеспечивая постоянное нахождение приложения в состоянии, пригодном для развертывания. С помощью CD изменения кода автоматически подготавливаются к релизу. В некоторых случаях CD означает непрерывное развертывание, когда каждое изменение, прошедшее тесты, автоматически развертывается в продакшен без ручного вмешательства.

Jenkins как инструмент CI/CD

Jenkins — это мощный сервер автоматизации с открытым исходным кодом, который помогает разработчикам и QA-командам эффективно создавать, тестировать и развертывать программное обеспечение. Он является одним из самых популярных инструментов в экосистеме CI/CD и выступает в качестве клея, объединяющего рабочий процесс автоматизации. Независимо от того, работаете ли вы над небольшими личными проектами или управляете проектами масштаба предприятия, Jenkins предлагает гибкость и расширяемость для удовлетворения любых потребностей.

Преимущества Jenkins в CI/CD?

Jenkins играет центральную роль в CI/CD, автоматизируя такие ключевые задачи, как:

  • Извлечение кода из системы контроля версий, например GitHub или GitLab
  • Сборка кода с помощью таких инструментов, как Maven или Gradle
  • Выполнение тестов с помощью TestNG, JUnit, Selenium и т.д.
  • Развертывание сборок в различных средах, таких как тестовое, предпродакшен или продакшен
  • Уведомление заинтересованных сторон об успехах или неудачах процесса по электронной почте, в Slack или с помощью информационных панелей

Почему стоит использовать Jenkins для автоматизации тестирования?

Jenkins хорошо совместим с широким спектром фреймворков и инструментов автоматизации тестирования. Он упрощает процесс выполнения тестовых наборов, фиксирует результаты и обеспечивает непрерывную обратную связь с командой разработчиков. Его способность интегрироваться с такими популярными инструментами, как Selenium, TestNG, JUnit, Cucumber и Allure, делает его идеальным выбором для проектов автоматизации.

Основные причины использовать Jenkins для автоматизации тестирования:

  • Автоматизированное планирование: выполнение тестов через определенные промежутки времени, после фиксации кода или перед релизом.
  • Запуск при изменении кода: Jenkins может автоматически инициировать тесты, когда новый код попадает в систему контроля версий.
  • Отчеты по тестам: Jenkins поддерживает встроенную визуализацию результатов тестов (например, отчеты TestNG, JUnit и Allure) и визуализацию на основе плагинов.
  • Интеграция с инструментами DevOps: бесшовное соединение с Docker, Kubernetes, Slack, GitHub и другими.
  • Масштабируемость: распределение выполнения тестов между несколькими агентами и средами.

Преимущества Jenkins для автоматизации

  • Открытый исходный код и бесплатность: Jenkins опирается на активное сообщество, что делает его экономически эффективным и хорошо поддерживаемым.
  • Расширяемость: более 1500 плагинов позволяют адаптировать Jenkins к любому рабочему процессу или цепочке инструментов.
  • Кроссплатформенная совместимость: работает на всех основных операционных системах, таких как Windows, macOS и Linux.
  • Богатая экосистема плагинов: поддерживает интеграцию практически с любым инструментом тестирования, развертывания или мониторинга.
  • Легкая интеграция: быстрое подключение к системам контроля версий, инструментам сборки и библиотекам тестирования.
  • Стабильность и надежность: проверено тысячами организаций и команд по всему миру для процессов CI/CD.
  • Сообщество и документация: Исчерпывающая документация, активные форумы и частые обновления делают его удобным для новичков и экспертов.

Настройка среды и создание Java-проекта Selenium

Прежде чем интегрировать тесты в Jenkins, необходимо создать базовый фреймворк Selenium Java.

  • Установка Java, Maven и Git: Java требуется как для Selenium, так и для Jenkins. Maven работает с зависимостями и сборками, а Git обеспечивает контроль версий.
  • Настройка IDE (IntelliJ/Eclipse): Выберите предпочтительную IDE для эффективного написания и организации тестового кода.
  • Создание проекта Selenium Java: Начните с проекта Maven, чтобы легко управлять структурой тестов и зависимостями.
  • Создание проекта Maven и управление зависимостями: Используйте файл pom.xml для добавления Selenium, TestNG и других библиотек.
  • Написание первого теста (TestNG или JUnit): Создайте простые тесты, чтобы проверить свою настройку и убедиться, что все работает.
  • Выполнение тестов локально: Выполняйте тесты через IDE или с помощью команды Maven mvn test.

Контроль версий с помощью Git

Использование Git обеспечивает отслеживаемость кода автоматизации тестирования, возможность совместной работы и легкую интеграцию в конвейеры CI/CD.

  • Инициализация Git в вашем проекте: Начните с запуска git init в каталоге проекта, чтобы отслеживать изменения локально.
  • Отправка кода на GitHub: Добавьте удаленный репозиторий и отправляйте код с помощью git push, чтобы делиться им и совместно работать с командой.

Основы Jenkins

Как скачать и установить Jenkins

  • Перейдите на официальный сайт Jenkins:
    https://www.jenkins.io/download/
  • Если вы работаете на Windows, то выберите Windows и загрузите программу установки .msi.
  • Запуск программы установки:
  • После установки Jenkins запускается как служба Windows, либо можно использовать java -jar jenkins.war
  • По умолчанию используется порт 8080
  • После установки откройте браузер и перейдите по ссылке: http://localhost:8080
  • При первом запуске Jenkins запросит начальный пароль администратора. Откройте этот файл, чтобы получить пароль: C:\Users.jenkins\secrets\initialAdminPassword
  • Замените на имя пользователя вашей системы
  • Установка плагинов:
  • Выберите Install suggested plugins (установить предлагаемые плагины)
  • Дождитесь завершения установки
  • Создание пользователя-администратора:
  • Заполните форму, чтобы создать свой первый аккаунт администратора.
  • Нажмите Save and Continue
  • Настройка URL-адреса Jenkins:
  • Сохраните значение по умолчанию: http://localhost:8080
  • Нажмите кнопку Save and Finish
  • Jenkins готов!
  • Нажмите кнопку Start using Jenkins (начать использовать Jenkins), чтобы перейти к панели управления.

Приборная панель Jenkins

Приборная панель Jenkins — это ваш центр. Отсюда вы можете создавать и управлять заданиями, просматривать историю сборок, получать доступ к системным конфигурациям через Manage Jenkins и следить за состоянием рабочих процессов автоматизации. Основные функции Jenkins:

  • New Item: Создание новой задачи (проекта)
  • Build History: Список завершенных и текущих билдов
  • Manage Jenkins: Конфигурация системы, управление плагинами, учетные данные
  • People: Просмотр учетных записей и разрешений пользователей
  • My Views: Кастомизация приборной панели

Установка необходимых плагинов

Плагины делают Jenkins мощнее. Вы можете установить плагины в любое время, перейдя в Manage Jenkins > Manage Plugins и выбрав вкладку Available.

Ключевые плагины для автоматизации тестирования:

  • Git Plugin — интеграция с GitHub/GitLab
  • Maven Integration Plugin — запускает сборки Maven
  • Плагины TestNG или JUnit — анализируют и отображают результаты тестирования
  • Плагины Allure или Extent Reports — улучшают отчетность

Настройка JDK, Maven и Git в Jenkins

После того как Jenkins установлен и доступен из браузера (обычно по адресу http://localhost:8080), следующим шагом будет настройка основных инструментов, таких как JDK, Maven и Git, чтобы Jenkins мог компилировать и запускать ваши автотесты.

Шаг 1: Настройка JDK

  1. Перейдите в раздел Manage Jenkins > Tools
  2. Прокрутите страницу до раздела JDK
  3. Нажмите кнопку Add JDK
  4. Снимите флажок Install automatically, если Java уже установлена в вашей системе
  5. Укажите имя (например, JDK-17) и путь к JAVA_HOME (например, C:\Program Files\Java\jdk-17)
  6. Нажмите Save

Примечание: Если вы установите флажок Install automatically, Jenkins загрузит JDK за вас во время выполнения задачи, но ручная настройка более стабильна для корпоративных систем.

Шаг 2: Настройте Maven

  • В разделе «Tools» прокрутите страницу до раздела Maven
  • Нажмите кнопку Add Maven
  • Снимите флажок Install automatically, если установлен Maven
  • Задайте имя (например, Maven-3.9.1) и укажите путь к MAVEN_HOME (например, C:\apache-maven-3.9.1)
  • Нажмите Save

Шаг 3: Настройте Git

  • Все еще находясь в разделе «Global Tool Configuration», прокрутите страницу до Git
  • Обычно Jenkins автоматически определяет Git, если он установлен. Если нет:
  • Нажмите Add Git
  • Укажите путь к исполняемому файлу Git (например, C:\Program Files\Git\bin\git.exe)
  • Сохраните изменения

Примечание: Вы должны предварительно установить Git в вашей системе.

Создание Freestyle-проекта

Freestyle-проект — это самый простой и гибкий тип задачи в Jenkins. Он позволяет выполнять простые задачи CI, такие как сборка и тестирование кода.

Шаги:

  • Перейдите на панель инструментов Jenkins Dashboard.
  • Нажмите на кнопку New Item.
  • Введите имя проекта (например, MyAutomationProject).
  • Выберите проект Freestyle и нажмите OK.
  • Вы попадете на экран конфигурации проекта.

Подключение к GitHub

Чтобы вытащить ваш код из GitHub в Jenkins:

  • В конфигурации вашего Freestyle-проекта:
  • Перейдите к разделу Source Code Management.
  • Выберите Git.
  • Вставьте URL-адрес вашего репозитория GitHub (например, https://github.com/your-username/your-project.git).
  • В разделе Credentials нажмите Add, если ваш репозиторий является приватным.
  • Выберите Username/Password и введите свои учетные данные GitHub или персональный токен доступа.
  • Нажмите Save.

Запуск сборки Maven в Jenkins

Если ваш проект использует Maven (например, существует файл pom.xml), вы можете запускать Maven-цели напрямую.

Шаги:

  • В конфигурации вашего Freestyle-проекта:
  • Прокрутите страницу до раздела «Build».
  • Нажмите Add build step → выберите Invoke top-level Maven targets.
  • В разделе «Goals» введите: «clean test».
  • В разделе «Build Environment» убедитесь, что Maven и JDK настроены правильно (задаются глобально через Manage Jenkins > Global Tool Configuration).
  • Нажмите Save и Build Now.

Автоматический запуск сборок (настройка вебхуков)

Чтобы автоматически запускать задачи в Jenkins при каждой публикации на GitHub необходимо:

В Jenkins:

  • В конфигурации вашего Freestyle-проекта:
  • Прокрутите страницу до пункта Build Triggers.
  • Выберите GitHub hook trigger for GITScm polling (запускать сборку по вебхуку от GitHub).

В GitHub:

  1. Перейдите в репозиторий → Settings → Webhooks → Add webhooks.
  2. Заполните:
  3. URL-адрес: http:///github-webhook/
  4. Content type: application/json
  5. Events (события): Выберите «just the push event».
  6. Сохраните Webhook.

Теперь Jenkins будет автоматически запускать сборку каждый раз после обновления кода в репозитории GitHub.

SCM Polling (Опрос SCM)

Опрос системы управления версиями (Source Code Management) позволяет Jenkins периодически проверять ваш репозиторий Git (или другую систему управления версиями) на наличие изменений. Если изменения найдены, запускается сборка.

Использование SCM Polling удобно, когда:

  • Webhooks не поддерживаются или не настроены.
  • Вы хотите, чтобы Jenkins регулярно проверял обновления по расписанию.

Пошаговая установка:

  • Откройте Jenkins и перейдите к своей задаче/проекту.
  • Нажмите «Configure » в боковой панели.
  • Прокрутите страницу до раздела «Build Triggers«.
  • Установите флажок: Poll SCM
  • В поле «Schedule» (расписание) введите выражение типа cron.
  • Нажмите “Save”.

Примеры выражений Cron:

Примечание: H («Hash») — равномерно распределяет опрос, предотвращая одновременный запуск всех заданий.

Сборки по расписанию (CRON-задания)

Jenkins позволяет запускать задачи автоматически в определенное время, независимо от изменений исходного кода.

Использование CRON-заданий удобно, когда нужно проводить:

  • Ночные регрессионные тесты
  • Тестирование производительности в часы низкого трафика
  • Для еженедельной отчетности

Пошаговая установка:

  • Нажмите «Configure«.
  • Откройте Jenkins и перейдите к своей задаче/проекту.
  • В разделе Build Triggers активируйте чек-бокс: Build periodically
  • В поле «Schedule» (расписание) введите выражение типа cron.
  • Нажмите “Save”.

Примеры выражений Cron:

Написание и использование Jenkins Pipeline

Jenkins Pipelines (пайплайны Jenkins) позволяют определять этапы сборки, тестирования и развертывания в коде, что делает систему автоматизации многократно используемой, версионируемой и более мощной по сравнению с Freestyle-проектами.

Файлы Jenkins

Файл Jenkins — это обычный текстовый файл, содержащий код пайплайна. Он добавляется в корень репозитория проекта, чтобы Jenkins мог автоматически обнаружить и запустить пайплайн.

Зачем использовать файл Jenkins?

  • Он сохраняет этапы CI/CD в коде (версионируемость)
  • Поддерживает как простые, так и сложные рабочие процессы
  • Позволяет проще отлаживать, использовать повторно и делиться конфигурацией

Объяснение синтаксиса Declarative Pipeline

Declarative Pipeline (Декларативный пайплайн) — это самый простой способ определения пайплайнов. Он использует структурированный и удобочитаемый синтаксис.

Разберем каждый участок пайплайна:

1. pipeline { }: Это корневой блок, определяющий весь пайплайн Jenkins.

pipeline {

}

2. agent any: указывает, что Jenkins может запустить этот пайплайн на любом доступном агенте (ноде).

Можно также использовать:

  • agent none → если вы хотите определить агентов для каждого этапа.
  • agent { label ‘linux’ } → для выбора определенных нод.

3. Tools (Инструменты): указывает необходимые инструменты (например, JDK и Maven), которые Jenkins должен установить в окружении перед выполнением любого этапа.

tools{

jdk ‘JDK-22’

maven ‘Apache Maven 3.9.9’

}

Они должны быть предварительно настроены в Jenkins → Tool.

4. Stages (Этапы): это набор шагов, где каждый этап выполняет определенную задачу в процессе CI/CD.

  • stage(‘Checkout’): здесь ваш код берется из репозитория Git.
  • stage(‘Build’): Компилирует код и собирает проект (запускает mvn clean install).
  • stage(‘Test’): Это запустит ваши тесты, используя тестовую фазу Maven.
  • stage(‘Publish Results’): Публикует результаты тестирования (отчеты JUnit), чтобы вы могли просмотреть результаты тестирования в Jenkins.
  • Команда JUnit подхватывает XML-отчеты, сгенерированные плагином Maven Surefire.

Пошаговый скрипт пайплайна для Selenium-тестов

  • Создайте файл Jenkins (Jenkinsfile) в корне вашего проекта.
  • Добавьте код пайплайна, как показано в примере выше.
  • В Jenkins:
  • Создайте новый Pipeline.
  • В разделе конфигурация «Pipeline» выберите:
  • Definition: Pipeline script from SCM
  • SCM: Git
  • URL репозитория: https://github.com/your-username/your-repo.git
  • Script Path: Jenkins file
  • Save и Build Now

Публикация результатов тестирования в Jenkins

Чтобы просмотреть результаты тестирования в графическом виде в Jenkins:

  • Убедитесь, что ваши Selenium-тесты генерируют отчеты о тестировании в формате JUnit (например, с помощью maven-surefire-plugin).
  • Добавьте в свой пайплайн:
  • junit ‘*/surefire-reports/.xml’
  • Теперь Jenkins будет показывать результаты тестирования сборки, включая число пройденных/непройденных тестов, графики и тренды.
  • Просмотр результатов:
  • Перейдите на панель инструментов Jenkins (Dashboard)
    Откройте Jenkins Dashboard в браузере.
  • Выберите свой проект
    Щелкните по названию проекта (задачи), который вы запускали.
  • Нажмите на номер сборки
    В разделе «Build History« (обычно слева) нажмите на конкретный номер сборки, который вы хотите проверить (например, #12).
  • Нажмите на Test results.
  • Также вы можете проверить полный лог сборки.

Откройте вывод консоли (Console Output)
На странице сборки нажмите на «Console Output » в левой боковой панели.

Просмотр логов в режиме реального времени

  • Здесь находятся:
  • Детали проверки Git
  • Логи сборки Maven
  • Результаты выполнения теста
  • Любые ошибки, трассировка стека или пропущенные шаги

Устранение неполадок или проверка успешности выполнения

  • Если сборка провалилась, то в логах можно определить, что пошло не так.
  • Если сборка прошла успешно, логи подтверждают, что все шаги выполнены.

Продвинутые методы выполнения тестов в Jenkins

Оптимизируйте тестовые пайплайны с помощью параллельного выполнения, группировки и запуска в зависимости от окружения.

По мере роста тестовых наборов в Selenium или API решающее значение приобретает эффективное управление их выполнением. Jenkins в сочетании с такими инструментами, как TestNG, Maven Surefire, и правильным структурированием тестов может помочь выполнять тесты быстрее и эффективнее. Далее в статье мы рассмотрим продвинутые стратегии выполнения тестов, чтобы поднять ваши процессы CI/CD на новый уровень.

Параллельный запуск тестов (TestNG + Maven Surefire)

Зачем нужно параллельное выполнение?

Длинные наборы тестов могут замедлить цикл обратной связи. Параллельный запуск тестов сокращает время выполнения и ускоряет поставку.

Необходимые условия:

  • TestNG для структурирования тестов
  • Плагин Maven Surefire для выполнения
  • Корректное использование тестовых классов и практика потокобезопасного кодирования

Шаг 1: Настройка testng.xml

<suite name="ParallelSuite" parallel="classes" thread-count="4">
  <test name="ParallelTests">
    <classes>
      <class name="tests.LoginTest"/>
      <class name="tests.SearchTest"/>
    </classes>
  </test>
</suite>
  • parallel="classes" запускает классы параллельно
  • thread-count="4" позволяет одновременно выполнять 4 теста

Шаг 2: Настройка плагина Maven Surefire в файле pom.xml

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
      <suiteXmlFiles>
        <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
      </suiteXmlFiles>
    </configuration>
  </plugin>
</plugins>

Запуск команды в пайплайне Jenkins:

stage('Parallel Test Execution') {
  steps {
    sh 'mvn clean test'
  }
}

Использование тегов или групп для выборочного выполнения

Зачем нужны группы?

В больших проектах не все тесты должны выполняться каждый раз. Используя группы TestNG, вы можете организовать и выборочно выполнять тесты в зависимости от их назначения (смоук, регрессионные, sanity (санити)).

Пример:

@Test(groups = {"smoke"})
public void verifyHomePageLoads() {
    // test logic
}
@Test(groups = {"regression"})
public void verifyUserCanLogin() {
    // test logic
}

testng.xml для группового выполнения:

<groups>
  <run>
    <include name="smoke"/>
  </run>
</groups>

Интеграция с файлами Jenkins (Jenkinsfile):

stage('Smoke Test Execution') {
  steps {
    sh 'mvn test -Dgroups="smoke"'
  }
}

Отчетность

Создание отчетов HTML, Allure и Extent

1. Отчеты в формате HTML (TestNG по умолчанию)

TestNG автоматически генерирует основные HTML-отчеты в каталоге test-output.
Path (путь): project-root/test-output/index.html

Посмотреть отчет:

  • Откройте файл index.html после выполнения теста
  • Краткая сводка об успешности тестового набора, подсчет пройденных/не пройденных тестов

2. Расширенные отчеты

Расширенные отчеты предлагают наглядный, настраиваемый и интерактивный HTML-отчет с логами, скриншотами, этапами и статусом тестирования.
Path (путь): project-root/test-output/extent-report.html

Как настроить расширенный отчет:
Добавьте зависимость в файл pom.xml:

<dependency>
  <groupId>com.aventstack</groupId>
  <artifactId>extentreports</artifactId>
  <version>5.1.2</version>
</dependency>

3. Allure Reports

Allure предоставляет наглядные отчеты о тестировании с пошаговым выполнением, логами, вложениями и четкой историей.
Path (путь): project-root/allure-results (для отчета в формате HTML).

Как настроить Allure:
Добавьте зависимость в файл pom.xml:

<dependency>
  <groupId>io.qameta.allure</groupId>
  <artifactId>allure-testng</artifactId>
  <version>2.29.1</version>
</dependency>

Прикрепление отчетов к сборкам Jenkins

Архивирование артефактов
К артефактам сборки Jenkins можно прикреплять отчеты Extent или HTML:

post {
  always {
    archiveArtifacts artifacts: 'test-output/**/*.html', fingerprint: true
  }
}

Просмотр в Jenkins:

  • После завершения сборки перейдите к номеру сборки
  • Найти «Archived Artifacts»
  • Загрузите оттуда отчет в формате HTML

Заключение

В этот статье мы рассмотрели как создать современный и полноценный конвейер автоматизации тестирования с использованием Jenkins, Selenium и Java — от настройки проекта до интеллектуальной отчетности. Благодаря основе CI/CD процессов ваше тестирование станет быстрее, эффективнее и полностью автоматизированным. Независимо от того, работаете ли вы над небольшим проектом или масштабируете автоматизацию до уровня корпоративных задач, такая настройка позволит выявлять проблемы на ранней стадии и обеспечивать высокое качество выпускаемого продукта.

Интеграция тестов Selenium Java с Jenkins ускоряет процесс CI/CD и обеспечивает более высокую надежность кода за счет непрерывного автоматизированного тестирования. Jenkins позволяет командам без труда выполнять тесты, отслеживать результаты и поддерживать стабильное качество сборки в разных средах.

Перевод статьи «Become a CI/CD Pro: Run Selenium Java Tests in Jenkins Pipelines from Scratch!».

🔥 Какой была ваша первая зарплата в QA и как вы искали первую работу? 

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Читать в телеграм

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *