Как проводить тестирование с использованием Jenkins
В современном мире разработки ПО, где релизы происходят часто, автоматизация тестирования стала не роскошью, а жизненной необходимостью.

Jenkins давно один из широко известных и распространенных инструментов для автоматизации CI/CD процессов. Сегодня мы разберем, как превратить этого «железного дворецкого» разработки в эффективного помощника для автоматизации тестирования — от установки до создания полноценных пайплайнов.
- Что такое Jenkins и зачем он нужен тестировщику
- Преимущества и недостатки
- Когда стоит использовать Jenkins для тестов
- Как установить и настроить Jenkins
- Первичная настройка и создание проекта
- Настройка тестирования
- Работа с отчётами: Allure, HTML, email и Slack
- Пример Jenkins Pipeline: пошаговый сценарий
- Расширенные возможности для автоматизации
- Безопасность и управление доступом
- Заключение
- Рекомендуем посмотреть курсы по QA-тестированию
Что такое Jenkins и зачем он нужен тестировщику
Jenkins — это open-source сервер автоматизации, который можно смело назвать швейцарским ножом в мире CI/CD. Этот инструмент появился на свет в далеком 2011 году (когда динозавры DevOps еще не вымерли) и с тех пор стал де-факто стандартом для автоматизации процессов сборки, тестирования и развертывания.
Для тестировщика дженкинс — это возможность забыть о рутинном запуске тестов после каждого коммита и сосредоточиться на более интересных задачах (например, на написании новых тестов или поиске багов, которые разработчики клятвенно уверяют, что «не могут существовать в принципе»).
Ключевые возможности Jenkins:
- Автоматический запуск тестов по триггерам (коммит, расписание, webhook).
- Интеграция с более чем 1800 плагинами — от Git до Slack.
- Поддержка распределенных сборок на множестве машин.
- Генерация подробных отчетов о результатах тестирования.
- Настройка уведомлений о статусе сборки.
- Возможность создания сложных пайплайнов как кода.
Параметр | Jenkins | TeamCity | GitLab CI | CircleCI |
---|---|---|---|---|
Лицензия | Open Source | Коммерческая | Freemium | Коммерческая |
Плагины | 1800+ | Ограничено | Встроенные | Ограничено |
Кривая обучения | Высокая | Средняя | Низкая | Низкая |
Гибкость | Максимальная | Высокая | Средняя | Средняя |

Визуальное сравнение гибкости, кривой обучения и числа плагинов у четырёх CI/CD инструментов. Диаграмма подчеркивает сильные стороны Jenkins по плагинам и гибкости.
Преимущества и недостатки
Как и любой инструмент, созданный людьми (а не искусственным интеллектом — пока что), дженкинс имеет свои светлые и темные стороны. Давайте разберем их честно, без маркетинговой мишуры.
Преимущества Jenkins для тестирования:
- Бесплатность — в отличие от многих конкурентов, Jenkins не выпрашивает деньги за базовый функционал.
- Гибкость настройки — можно настроить практически любой сценарий тестирования, даже самый извращенный.
- Огромная экосистема плагинов — если чего-то нет, то либо это не нужно, либо кто-то уже написал плагин.
- Активное сообщество — на Stack Overflow найдется ответ почти на любой вопрос (правда, иногда через 47 страниц поиска).
- Масштабируемость — можно развернуть от одного сервера до целой фермы агентов.
- Pipeline as Code — возможность версионировать процессы CI/CD вместе с кодом.
Недостатки Jenkins:
- Сложность первичной настройки — новичок может потратить неделю, чтобы запустить простейший тест.
- Устаревший интерфейс — выглядит так, будто его дизайнили в эпоху Windows XP.
- Высокие требования к обслуживанию — плагины конфликтуют, обновления ломают настройки.
- Ресурсоемкость — может съесть оперативку как голодный студент пиццу.
- Отсутствие встроенной отказоустойчивости — если master упал, все встает колом.
- Безопасность требует внимания — из коробки не самый защищенный инструмент.
Когда стоит использовать Jenkins для тестов
Не каждый проект нуждается в дженкинс — иногда это как покупать Ferrari для поездок в ближайший магазин. Но есть ситуации, когда без этого «монстра автоматизации» жизнь превращается в ад тестировщика.
Jenkins становится незаменимым помощником, когда ваша команда разработки работает активнее, чем пчелы в период медосбора — то есть коммиты летят каждый час, а то и чаще. В таких условиях ручное тестирование после каждого изменения превращается в сизифов труд, только камень тяжелеет с каждым днем.
Типовые кейсы использования Jenkins в QA:
- Regression testing после каждого коммита — автоматический запуск полного набора тестов для проверки, что новый код не сломал старый функционал.
- Мультиплатформенное тестирование — одновременный запуск тестов на Windows, Linux, macOS и различных версиях браузеров.
- Ночные прогоны тестов — длительные тесты производительности или интеграционные тесты, которые выполняются по расписанию.
- Тестирование на разных окружениях — автоматическое развертывание и тестирование на dev, staging, pre-prod средах.
- API и нагрузочное тестирование — регулярные проверки производительности и стабильности сервисов.
- Smoke testing перед релизом — быстрая проверка критически важного функционала перед деплоем в продакшн.

Горизонтальная диаграмма, показывающая распределение ключевых сценариев применения Jenkins в тестировании. Самая большая доля приходится на регрессионное тестирование.
Особенно Jenkins блещет в проектах с микросервисной архитектурой, где изменение в одном сервисе может неожиданно сломать интеграцию с десятком других. Здесь автоматизация тестирования — не просто удобство, а вопрос выживания команды и ее психического здоровья.
Как установить и настроить Jenkins
Установка дженкинс — это как сборка мебели из IKEA: кажется простой до тех пор, пока не начинаешь разбираться с инструкцией. Но не волнуйтесь, я проведу вас через этот квест без лишних синяков на пальцах.

Скриншот страницы загрузки Jenkins (кнопки LTS/Weekly, платформы).
Первое и главное требование — Java 11 или выше.
Пошаговая установка:
- Подготовка системы — убедитесь, что Java JDK установлена (java -version в командной строке не должна ругаться)
- Загрузка — идем на jenkins.io/download и скачиваем нужную версию (LTS рекомендуется для продакшена)
- Установка по платформам:
- Windows: запускаем .msi файл и следуем мастеру установки
- Linux Ubuntu/Debian: добавляем репозиторий и устанавливаем через apt
- Docker: docker run -p 8080:8080 jenkins/jenkins:lts
- Первый запуск — открываем браузер, переходим на localhost:8080, вводим admin пароль из файла (путь покажет сам Jenkins)
- Установка плагинов — выбираем «Install suggested plugins» или настраиваем вручную (для новичков лучше первый вариант)
- Создание admin пользователя — заполняем форму, не забываем записать пароль (серьезно, запишите!)
Jenkins можно также развернуть в облаке через CloudBees или использовать managed-решения от крупных провайдеров. Docker-вариант особенно удобен для экспериментов — можно быстро поднять, потестировать, снести и забыть как страшный сон.
Важный момент: после установки обязательно настройте backup стратегию. Потерять конфигурацию дженкинс после месяцев настройки — это как потерять сохранение в RPG на финальном боссе.
Первичная настройка и создание проекта
После успешной установки дженкинс встречает вас интерфейсом, который выглядит так, будто его дизайнили программисты для программистов в 2005 году (что, собственно, недалеко от истины). Но не дайте этому винтажному виду обмануть себя — под капотом скрывается мощнейший инструмент автоматизации.
Создание первого проекта в Jenkins — это ритуал посвящения в мир CI/CD. Кликаем на «New Item» (или «Создать элемент» в русской локализации) и попадаем в меню выбора типа проекта. Здесь важно понимать разницу между основными вариантами:
Freestyle project — это классический подход, где вы настраиваете все через веб-интерфейс, кликая по чекбоксам и заполняя поля. Идеально для начинающих и простых задач. Думайте о нем как о «конструкторе Lego» — все наглядно, но ограничено предустановленными блоками.
Pipeline — современный подход «infrastructure as code», где вся логика CI/CD описывается в специальном файле Jenkinsfile. Это как писать программу для автоматизации — гибко, версионируется вместе с кодом, но требует знания синтаксиса Pipeline DSL.
Для первого опыта выбираем Freestyle project и называем его осмысленно — например, «MyApp-Tests» вместо «Test123» (поверьте, через полгода вы не вспомните, что тестировал «Test123»).
В разделе «Source Code Management» указываем Git-репозиторий. Здесь же настраиваем аутентификацию — дженкинс может работать с SSH-ключами, токенами или username/password (последний вариант менее безопасен, но проще для старта). Не забудьте указать нужную ветку — по умолчанию Jenkins пытается использовать master/main, но ваши тесты могут жить в отдельной ветке develop или feature/tests.
В разделе «Build Triggers» настраиваем, когда должны запускаться тесты: по коммиту в репозиторий (через webhook), по расписанию (cron-like синтаксис) или вручную. Для начала можно оставить ручной запуск — так безопаснее экспериментировать.
Настройка тестирования
Теперь переходим к самому интересному — заставляем дженкинс не просто скачивать код, а реально запускать тесты. Это как научить собаку не только приносить тапочки, но и проверять их на чистоту.
В разделе «Build Steps» добавляем команды для запуска тестов. Jenkins не умеет читать мысли (пока что), поэтому нужно четко прописать, что и как запускать. Выбираем «Execute shell» (для Linux/Mac) или «Execute Windows batch command» (для Windows) и пишем команды так, будто объясняем инопланетянину, как заварить чай.
Типичные команды выглядят примерно так:
- Для Python: python -m pytest tests/ —junitxml=reports/results.xml
- Для Java/Maven: mvn clean test -Dmaven.test.failure.ignore=true
- Для Node.js: npm test — —reporter=xunit —outputFile=test-results.xml
Ключевой момент — генерация XML-отчетов в формате JUnit. Даже если ваши тесты написаны на Python, JavaScript или Ruby, большинство фреймворков умеют выдавать результаты в JUnit-совместимом формате. Это как универсальный переводчик между вашими тестами и дженкинс.
В разделе «Post-build Actions» добавляем «Publish JUnit test result report» и указываем путь к XML-файлам с результатами (например, **/test-results.xml или reports/*.xml). Jenkins проанализирует эти файлы и создаст красивые графики с трендами прохождения тестов — зеленые столбики радуют глаз, красные заставляют искать виноватых.
Также можно настроить архивирование артефактов сборки (скриншоты упавших тестов, логи, отчеты coverage) в разделе «Archive the artifacts». Указываем паттерн файлов типа screenshots/*.png, logs/*.log и Jenkins сохранит все это богатство для последующего анализа.
JUnit, TestNG, PyTest — примеры подключения
Каждый тестовый фреймворк имеет свои особенности генерации отчетов, но принцип один — получить XML в понятном Jenkins формате:
# PyTest (Python) pytest tests/ --junitxml=junit.xml --html=report.html --self-contained-html # TestNG (Java) mvn test -DsuiteXmlFile=testng.xml # Jest (JavaScript) npm test -- --ci --reporters=default --reporters=jest-junit
В Jenkinsfile это выглядит элегантнее:
stage('Test') { steps { sh 'pytest tests/ --junitxml=results.xml' } post { always { junit 'results.xml' publishHTML([allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'htmlcov', reportFiles: 'index.html', reportName: 'Coverage Report']) } } }
Работа с отчётами: Allure, HTML, email и Slack
Генерировать отчеты о тестировании и никому их не показывать — это как готовить ужин и есть его в темноте. Jenkins умеет не только собирать результаты тестов, но и красиво их презентовать, а также уведомлять всех заинтересованных лиц о том, что произошло (особенно когда что-то пошло не так).
Allure Report — это, пожалуй, самый стильный способ показать результаты тестирования. Этот инструмент превращает скучные XML-отчеты в интерактивную веб-страницу с графиками, временными линиями и подробной информацией о каждом тесте. Установить Allure плагин — дело нескольких кликов через «Manage Plugins».
После установки добавляем в Post-build Actions пункт «Allure Report» и указываем путь к результатам (обычно allure-results/). Jenkins автоматически сгенерирует отчет и добавит ссылку на него в интерфейс сборки. Результат выглядит так профессионально, что можно не стыдиться показать даже топ-менеджменту.
HTML Publisher плагин позволяет публиковать любые HTML-отчеты — от coverage отчетов до кастомных дашбордов. Настройка простая: указываем директорию с HTML-файлами, главный файл (обычно index.html) и название отчета.
Email Extension плагин превращает дженкинс в персонального секретаря, который рассылает уведомления о результатах сборки. Можно настроить отправку писем только при падении тестов, при восстановлении после падения, или вообще всегда (но тогда коллеги могут начать игнорировать ваши письма как спам).
Slack Notifier — современная альтернатива email для команд, которые живут в Slack. Настраиваете webhook, и дженкинс будет постить результаты прямо в нужный канал с эмодзи и ссылками на детальные отчеты. Особенно эффектно выглядят уведомления с красными крестиками, когда кто-то сломал тесты на master ветке — публичный позор иногда работает лучше любых процессов код-ревью.
Пример настройки в Jenkinsfile:
post { always { allure([includeProperties: false, jdk: '', results: [[path: 'allure-results']]]) } failure { slackSend channel: '#qa-alerts', color: 'danger', message: "Tests failed! Build: ${env.BUILD_URL}" } }
Пример Jenkins Pipeline: пошаговый сценарий
Freestyle проекты — это хорошо для начала, но настоящие профессионалы используют Pipeline as Code. Это как переход от рисования в Paint к профессиональному Photoshop — сначала кажется сложно, но потом уже не хочется возвращаться к примитивным инструментам.
Jenkinsfile — это специальный файл, который описывает весь процесс CI/CD на языке Groovy (не пугайтесь, синтаксис довольно простой). Главное преимущество такого подхода — вся логика сборки версионируется вместе с кодом, и изменения можно отслеживать через Git.
Вот пример базового Jenkinsfile для Java проекта с Maven:
pipeline { agent any tools { maven 'Maven-3.8.1' jdk 'JDK-11' } stages { stage('Checkout') { steps { echo 'Получаем свежий код из репозитория...' checkout scm } } stage('Build') { steps { echo 'Компилируем проект...' sh 'mvn clean compile' } } stage('Test') { steps { echo 'Запускаем тесты...' sh 'mvn test -Dmaven.test.failure.ignore=true' } post { always { junit '**/target/surefire-reports/TEST-*.xml' publishHTML([ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'target/site/jacoco', reportFiles: 'index.html', reportName: 'Coverage Report' ]) } } } stage('Package') { steps { echo 'Собираем артефакт...' sh 'mvn package -DskipTests' archiveArtifacts artifacts: 'target/*.jar', fingerprint: true } } } post { always { echo 'Очищаем workspace...' cleanWs() } success { echo 'Все прошло успешно! 🎉' } failure { echo 'Что-то пошло не так... 😢' emailext ( subject: "Build Failed: ${env.JOB_NAME} - ${env.BUILD_NUMBER}", body: "Build failed. Check console output at ${env.BUILD_URL}", to: "${env.CHANGE_AUTHOR_EMAIL}" ) } } }
Для Python проекта с PyTest логика похожая, но команды другие:
pipeline { agent any stages { stage('Setup') { steps { sh 'python -m pip install --upgrade pip' sh 'pip install -r requirements.txt' } } stage('Test') { steps { sh 'python -m pytest tests/ --junitxml=results.xml --cov=src --cov-report=html' } post { always { junit 'results.xml' publishHTML([ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'htmlcov', reportFiles: 'index.html', reportName: 'Coverage Report' ]) } } } } }
Логика каждого блока:
- Checkout — Jenkins автоматически скачивает код из Git репозитория.
- Build — компилируем код и устанавливаем зависимости.
- Test — запускаем тесты и генерируем отчеты.
- Package — создаем финальный артефакт для деплоя.
Секция post выполняется независимо от результата сборки и позволяет делать cleanup, отправлять уведомления или архивировать артефакты. Это как блок finally в программировании — выполнится в любом случае.
Расширенные возможности для автоматизации
Когда базовые пайплайны начинают казаться слишком простыми (что само по себе тревожный признак — возможно, вы уже слишком глубоко погрузились в мир DevOps), дженкинс предлагает целый арсенал продвинутых возможностей. Эти инструменты превращают обычный CI/CD пайплайн в швейцарский армейский нож автоматизации.
Параметры сборки позволяют делать пайплайны интерактивными. Вместо хардкода можно добавить параметры: какую ветку тестировать, какие тесты запускать, на каком окружении развертывать. В Jenkinsfile это выглядит так:
pipeline { agent any parameters { choice(name: 'ENVIRONMENT', choices: ['dev', 'staging', 'prod'], description: 'Target environment') booleanParam(name: 'RUN_INTEGRATION_TESTS', defaultValue: true, description: 'Run integration tests?') string(name: 'TEST_TAG', defaultValue: 'smoke', description: 'Test tag to run') } stages { stage('Test') { when { params.RUN_INTEGRATION_TESTS } steps { sh "pytest -m ${params.TEST_TAG} --env=${params.ENVIRONMENT}" } } } }
Параллельное выполнение — когда у вас тысячи тестов, и ждать их последовательного выполнения все равно что смотреть, как сохнет краска.

Диаграмма сокращения времени выполнения набора тестов при увеличении степени параллелизма. При 4× время выполнения снижается более чем в три раза.
Jenkins умеет распараллеливать задачи:
stage('Parallel Tests') { parallel { stage('Unit Tests') { steps { sh 'pytest tests/unit/' } } stage('Integration Tests') { steps { sh 'pytest tests/integration/' } } stage('UI Tests') { steps { sh 'pytest tests/ui/' } } } }
Shared Libraries — это как создание собственной библиотеки функций для дженкинс. Можно вынести часто используемую логику в отдельный репозиторий и переиспользовать в разных проектах. Особенно полезно для компаний с десятками проектов — вместо копипасты одного и того же кода создаете функцию deployToKubernetes() и используете везде.
Условия (when) добавляют интеллекта в пайплайны. Можно запускать определенные стадии только при соблюдении условий:
stage('Deploy to Production') { when { allOf { branch 'main' not { changeRequest() } environment name: 'DEPLOY_ENV', value: 'prod' } } steps { echo 'Deploying to production...' } }
Эти возможности превращают простой пайплайн сборки в умную систему, которая принимает решения на основе контекста. Правда, с большой силой приходит большая ответственность — сложные пайплайны требуют сложной отладки.
Безопасность и управление доступом
Безопасность в Jenkins — это как замки на входной двери: кажется очевидным, пока кто-то не забывает их поставить, а потом удивляется, почему все секреты компании оказались в публичном доступе. К сожалению, в мире существует слишком много дженкинс инстансов, которые работают с настройками «по умолчанию», что примерно как оставлять ключи в замке зажигания.
Jenkins из коробки не блещет параноидальным уровнем безопасности — он больше ориентирован на функциональность, чем на защиту. Поэтому первое, что нужно сделать после установки — настроить аутентификацию и авторизацию.
В разделе «Manage Jenkins» → «Configure Global Security» можно выбрать стратегию безопасности. Для небольших команд подойдет встроенная база пользователей дженкинс, для корпоративной среды лучше интегрироваться с LDAP/Active Directory или SAML. Matrix-based security позволяет гранулярно настроить права: кто может читать логи, кто может запускать сборки, а кто может вообще все сломать (обычно это админы).
Credential Store — это встроенное хранилище секретов дженкинс. Здесь можно безопасно сохранить пароли, API ключи, SSH ключи и сертификаты. Главное правило — никогда не хардкодить секреты в Jenkinsfile или скриптах сборки. Вместо этого используйте credentials binding:
environment { API_KEY = credentials('my-api-key') DB_PASSWORD = credentials('database-password') }
Jenkins шифрует все credentials с помощью AES и master key, который хранится отдельно. Но если кто-то получит доступ к файловой системе сервера, то может извлечь и расшифровать секреты — поэтому важно защищать сам сервер на уровне ОС.
Разделение ролей особенно важно в больших командах. Разработчики должны видеть только свои проекты, тестировщики — только результаты тестов, а менеджеры — только красивые дашборды (и желательно всегда зеленые). Role-based Authorization Strategy плагин позволяет создавать гибкие политики доступа.
Также стоит регулярно аудировать установленные плагины — некоторые из них могут иметь уязвимости безопасности. Jenkins Security Advisory регулярно публикует информацию о найденных проблемах. Автоматические обновления — это палка о двух концах: с одной стороны, закрывают дыры в безопасности, с другой — могут сломать существующие настройки.
Заключение
Jenkins — это как швейцарский армейский нож в мире автоматизации тестирования: мощный, универсальный, но требующий определенной сноровки, чтобы не порезать себе пальцы. После многих лет работы с различными CI/CD инструментами могу сказать одно — Jenkins остается одним из самых гибких решений на рынке, несмотря на свой винтажный интерфейс и иногда причудливое поведение. Подведм итоги:
- Jenkins автоматизирует выполнение тестов. Это экономит время тестировщика и сокращает количество ручных операций.
- Интеграция с фреймворками и инструментами расширяет возможности тестирования. Это позволяет адаптировать процесс под разные проекты и технологии.
- Плагины и пайплайны повышают гибкость настройки. Это помогает реализовать сложные сценарии тестирования без доработки кода.
- Отчёты и уведомления обеспечивают прозрачность QA-процесса. Это позволяет быстро выявлять ошибки и реагировать на сбои.
- Настройки безопасности защищают данные и доступы. Это снижает риски утечек и несанкционированных изменений в проекте.
Если только начинаете осваивать профессию тестировщика, рекомендуем обратить внимание на подборку курсов по QA-тестирования. В них есть теоретическая и практическая часть, включая настройку Jenkins и интеграцию с тестовыми фреймворками. Такой формат обучения поможет быстрее освоить CI/CD и уверенно применять навыки в реальных проектах.
Рекомендуем посмотреть курсы по QA-тестированию
Курс | Школа | Цена | Рассрочка | Длительность | Дата начала | Ссылка на курс |
---|---|---|---|---|---|---|
Тестировщик
|
Bang Bang Education
73 отзыва
|
Цена
85 000 ₽
170 000 ₽
|
|
Длительность
8 месяцев
|
Старт
в любое время
|
Ссылка на курс |
Автоматизированное тестирование на Python
|
Eduson Academy
68 отзывов
|
Цена
Ещё -13% по промокоду
85 000 ₽
212 496 ₽
|
От
7 083 ₽/мес
0% на 24 месяца
8 854 ₽/мес
|
Длительность
6 месяцев
|
Старт
в любое время
|
Ссылка на курс |
Автоматизированное тестирование на Python
|
Merion Academy
5 отзывов
|
Цена
8 100 ₽
13 500 ₽
|
От
675 ₽/мес
Рассрочка на 12 месяцев
|
Длительность
4 месяца
|
Старт
1 октября
|
Ссылка на курс |
Тестировщик ПО
|
Eduson Academy
68 отзывов
|
Цена
Ещё -5% по промокоду
87 412 ₽
95 900 ₽
|
От
4 162 ₽/мес
Беспроцентная. На 1 год.
10 406 ₽/мес
|
Длительность
4 месяца
|
Старт
6 сентября
|
Ссылка на курс |
Тестировщик ПО
|
Нетология
43 отзыва
|
Цена
с промокодом kursy-online
110 520 ₽
184 200 ₽
|
От
3 070 ₽/мес
Без переплат на 2 года.
4 805 ₽/мес
|
Длительность
6 месяцев
|
Старт
5 сентября
|
Ссылка на курс |

Unidraw – цифровая доска, которая заменит Miro?
Российская платформа Unidraw предлагает мощные инструменты для визуальной работы и совместного редактирования. Разбираем её преимущества перед конкурентами.

Без них уже не работа: плагины, которые меняют Figma
Какие плагины для Figma действительно экономят ваше время и нервы? В этом материале — список лучших инструментов, которые решают реальные задачи и улучшают дизайн без лишней возни.

Эта книга по Python действительно нужна вам?
Книг по Python много, но какие из них реально помогают прокачаться — от первых строк кода до продвинутых паттернов? Разбираемся на конкретных примерах.

Осваиваем Figma: легко, быстро и без лишних сложностей
Не знаете, с чего начать в Figma? В этом материале разберём, как зарегистрироваться, создать первый проект и использовать главные инструменты.