WebdriverIO — мощный инструмент для автоматизации тестирования веб-приложений, который легко интегрируется в процессы CI/CD. Правильная конфигурация позволяет запускать тесты автоматически при каждом изменении кода, обеспечивая стабильность и надежность приложения.
1. Разделение окружений CI/CD-процессы требуют различной конфигурации для локальной разработки и серверного запуска. Для этого используют отдельные файлы конфигурации или профили:
// wdio.conf.js
exports.config = {
runner: 'local',
specs: ['./tests/**/*.spec.js'],
maxInstances: 5,
capabilities: [
{
browserName: 'chrome',
},
],
logLevel: 'info',
bail: 0,
baseUrl: 'http://localhost',
waitforTimeout: 10000,
connectionRetryTimeout: 120000,
connectionRetryCount: 3,
};
Для CI можно создать wdio.ci.conf.js, где изменяются
maxInstances, logLevel и браузер (например,
запуск в headless-режиме).
На CI/CD-серверах отсутствует графический интерфейс, поэтому тесты запускаются в headless-браузерах:
capabilities: [
{
browserName: 'chrome',
'goog:chromeOptions': {
args: ['--headless', '--disable-gpu', '--window-size=1920,1080'],
},
},
]
Использование headless режима позволяет экономить ресурсы сервера и ускоряет прогон тестов.
GitHub Actions часто используется для автоматического запуска тестов при push или pull request. Пример workflow:
name: WebdriverIO Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x]
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npx wdio wdio.ci.conf.js
Особенности CI-окружения:
CI/CD-серверы позволяют запускать тесты параллельно, что сокращает общее время прогона:
maxInstances: 10,
capabilities: [
{
browserName: 'chrome',
maxInstances: 5,
},
]
Правила организации:
bail для прерывания тестов при критических
ошибках.Для CI важно получать отчёты о тестировании в удобном формате. WebdriverIO поддерживает несколько репортеров:
reporters: [
'spec',
['junit', {
outputDir: './reports/junit-results',
outputFileFormat: function(options) {
return `results-${options.cid}.xml`;
}
}],
['allure', {
outputDir: './reports/allure-results',
disableWebdriverStepsReporting: true,
}]
],
Особенности:
В CI полезно сохранять артефакты для анализа ошибок:
afterTest: async function(test, context, { error, result, duration, passed, retries }) {
if (!passed) {
await browser.saveScreenshot(`./reports/screenshots/${test.title}.png`);
}
},
Для видео-записи можно использовать интеграцию с сервисами типа Selenoid или BrowserStack, чтобы воспроизводить полный прогон тестов.
CI/CD-серверы используют переменные окружения для безопасного хранения токенов, URL и настроек:
baseUrl: process.env.BASE_URL || 'http://localhost',
user: process.env.SAUCE_USERNAME,
key: process.env.SAUCE_ACCESS_KEY,
Преимущества:
waitforTimeout с разумными значениями,
чтобы избежать зависаний.~/.npm), чтобы ускорить установку пакетов.Эти подходы формируют основу для стабильной работы WebdriverIO в CI/CD и обеспечивают масштабируемость автоматизации. Такой подход позволяет получать быстрые, детализированные и надежные результаты тестирования без вмешательства человека.