Jenkins представляет собой мощную систему непрерывной интеграции (CI), позволяющую автоматизировать сборку, тестирование и деплой приложений. В контексте тестирования с Puppeteer, Jenkins используется для организации автоматического запуска тестов в контролируемой среде, что обеспечивает стабильность и повторяемость тестирования.
1. Установка Jenkins Для работы с Puppeteer требуется последняя стабильная версия Jenkins. Рекомендуется использовать установку через официальные пакеты для выбранной операционной системы или Docker-образ Jenkins, что упрощает управление зависимостями.
2. Конфигурация среды Node.js Puppeteer работает поверх Node.js, поэтому необходимо установить Node.js на Jenkins-агент:
3. Настройка репозитория проекта Jenkins может получать исходный код из Git, GitHub, GitLab или Bitbucket. Важно правильно настроить ветку и методы аутентификации, чтобы Jenkins имел доступ к проекту.
Использование Pipeline позволяет создавать гибкие сценарии выполнения тестов. Структура Pipeline для Puppeteer обычно включает следующие шаги:
pipeline {
agent any
environment {
NODE_ENV = &
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/username/project.git'
}
}
stage('Install Dependencies') {
steps {
sh 'npm install'
}
}
stage('Run Puppeteer Tests') {
steps {
sh 'npx jest puppeteer'
}
}
}
post {
always {
archiveArtifacts artifacts: 'test-results/**/*.xml', allowEmptyArchive: true
junit 'test-results/**/*.xml'
}
}
}
Ключевые моменты:
Puppeteer по умолчанию использует Chromium, который требует графического окружения. На сервере Jenkins часто отсутствует GUI, поэтому необходимо включать headless режим:
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
Пояснение аргументов:
–no-sandbox отключает режим песочницы, необходимый для
некоторых CI-сред.
–disable-setuid-sandbox предотвращает ошибки запуска
Chromium в ограниченной среде.
Для корректной интеграции с Jenkins необходимо сохранять результаты тестов в формате, который понимает Jenkins, например, JUnit XML. Puppeteer часто используется вместе с Jest, который может генерировать XML-отчеты:
"jest": {
"preset": "jest-puppeteer",
"testResultsProcessor": "jest-junit"
}
После выполнения тестов Jenkins автоматически собирает артефакты и отображает результаты в виде графиков и детальных логов.
Для ускорения тестирования Puppeteer поддерживает запуск нескольких экземпляров браузера одновременно. В Jenkins это реализуется через параллельные стадии Pipeline:
stage('Parallel Tests') {
parallel {
stage('Test Suite 1') {
steps {
sh 'npx jest puppeteer/testSuite1'
}
}
stage('Test Suite 2') {
steps {
sh 'npx jest puppeteer/testSuite2'
}
}
}
}
Параллельное выполнение позволяет значительно сократить время CI-процесса, особенно при большом количестве UI-тестов.
Запуск Puppeteer в Docker-контейнерах обеспечивает изоляцию и воспроизводимость. Образ должен содержать Node.js, Chromium и необходимые зависимости:
FROM node:20-bullseye
RUN apt-get update && apt-get install -y \
wget \
ca-certificates \
fonts-liberation \
libappindicator3-1 \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libcups2 \
libdbus-1-3 \
libx11-xcb1 \
libxcomposite1 \
libxdamage1 \
libxrandr2 \
xdg-utils \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npx", "jest", "puppeteer"]
Такой подход гарантирует одинаковое выполнение тестов на локальной машине и в Jenkins.
Для отладки тестов на CI рекомендуется сохранять скриншоты и видео сессий браузера:
await page.screenshot({ path: 'screenshots/test.png', fullPage: true });
await page.video().save('videos/test.mp4');
Эти файлы затем архивируются Jenkins и позволяют быстро выявлять проблемы UI.
Jenkins позволяет запускать тесты на основе событий:
Правильная настройка триггеров обеспечивает автоматическое обнаружение ошибок на ранних стадиях разработки.
Использование Jenkins позволяет собирать статистику по стабильности Puppeteer-тестов:
Puppeteer в связке с Jenkins обеспечивает надежное и повторяемое тестирование пользовательского интерфейса, поддерживая полную автоматизацию CI/CD процессов.