CircleCI — одна из самых популярных платформ для автоматической интеграции и развертывания (CI/CD). Она позволяет значительно ускорить процессы разработки, автоматизируя тестирование, сборку и деплой приложений. В связке с WebdriverIO она становится мощным инструментом для автоматизации тестирования веб-приложений, обеспечивая непрерывную проверку качества кода и непрерывную интеграцию.
CircleCI работает по принципу создания пайплайнов (цепочек
процессов), которые выполняются автоматически при каждом коммите в
репозиторий. Важнейшая часть настройки CircleCI — это файл конфигурации
.circleci/config.yml, в котором определяются шаги, которые
должны выполняться на каждом этапе. Конфигурация может включать в себя
сборку, тестирование, деплой и другие процессы.
В процессе настройки можно указать, какие именно шаги должны выполняться в зависимости от ветки, этапа разработки или успешности предыдущих шагов. CircleCI интегрируется с GitHub, Bitbucket и другими системами управления версиями, что позволяет автоматически запускать пайплайны при изменениях в репозиториях.
WebdriverIO — это популярная библиотека для тестирования веб-приложений, которая поддерживает как написание тестов, так и их автоматическое выполнение в браузерах. Использование WebdriverIO в CircleCI позволяет автоматически запускать тесты при каждом изменении кода. Это гарантирует, что все новые изменения в проекте не ломают функциональность и соответствуют заранее определённым требованиям.
Чтобы интегрировать WebdriverIO с CircleCI, нужно выполнить несколько простых шагов.
Первоначально необходимо настроить окружение CircleCI. Для этого в
проекте должен быть файл конфигурации .circleci/config.yml.
В нём определяются шаги пайплайна и версии зависимостей, которые будут
использоваться в процессе тестирования. Пример простого
конфигурационного файла для использования WebdriverIO:
version: 2.1
executors:
node-executor:
docker:
- image: circleci/node:14
working_directory: ~/repo
jobs:
test:
executor: node-executor
steps:
- checkout
- run:
name: Установка зависимостей
command: npm install
- run:
name: Запуск тестов WebdriverIO
command: npm run test
workflows:
version: 2
test:
jobs:
- test
В вашем проекте должны быть установлены необходимые зависимости, включая WebdriverIO и другие пакеты, такие как драйверы для браузеров. Установите их с помощью npm:
npm install --save-dev webdriverio @wdio/cli @wdio/mocha-framework @wdio/sync
Также нужно добавить дополнительные зависимости для работы с браузерами, такие как драйверы Chrome и Firefox:
npm install --save-dev wdio-chromedriver-service
После установки всех зависимостей, важно настроить WebdriverIO, используя команду:
npx wdio config
Этот инструмент поможет вам создать файл конфигурации
wdio.conf.js, который используется для настройки
тестов.
Для корректной работы тестов в CircleCI нужно настроить WebdriverIO для выполнения в облачной среде, такой как Docker, или использовать сервисы облачного тестирования. В настройках тестов важно указать, что тесты должны выполняться в браузерах, запущенных через Docker.
Пример конфигурации WebdriverIO с использованием ChromeDriver:
exports.config = {
runner: 'local',
framework: 'mocha',
services: ['chromedriver'],
capabilities: [{
browserName: 'chrome',
'goog:chromeOptions': {
args: ['--headless', '--disable-gpu']
}
}],
logLevel: 'info',
baseUrl: 'https://your-website.com',
waitforTimeout: 10000,
connectionRetryTimeout: 90000,
connectionRetryCount: 3,
reporters: ['spec']
};
После настройки всех зависимостей и конфигурации WebdriverIO можно
настроить запуск тестов в CircleCI. В вашем конфигурационном файле
.circleci/config.yml вы указываете команду для запуска
тестов, которая будет выполняться после установки зависимостей.
Для запуска тестов WebdriverIO используется команда:
npm run test
Проверьте, что в вашем package.json есть соответствующий
скрипт:
"scripts": {
"test": "wdio wdio.conf.js"
}
CircleCI предоставляет гибкие возможности для настройки окружений. Вы можете настроить различные среды для выполнения тестов, используя параметры в конфигурации. Например, можно указать разные версии Node.js или браузеров для тестирования, а также задать различные параметры для окружений разработки, тестирования и продакшн.
Одним из способов настройки окружения является использование Docker-образов. CircleCI предоставляет возможность запускать контейнеры с различными изображениями, что помогает легко изменять конфигурации тестового окружения.
Пример настройки окружений с использованием Docker:
executors:
node-executor:
docker:
- image: circleci/node:14
- image: selenium/standalone-chrome:latest
working_directory: ~/repo
С помощью такого подхода можно использовать один контейнер для запуска тестов на Node.js и другой для запуска Selenium с браузером Chrome.
Одним из ключевых преимуществ CircleCI является поддержка параллельного выполнения тестов. Это позволяет ускорить процесс проверки, разделив тесты на несколько частей, которые могут выполняться одновременно на разных рабочих контейнерах.
Для включения параллелизма необходимо в конфигурации CircleCI указать количество параллельных задач:
jobs:
test:
docker:
- image: circleci/node:14
parallelism: 4
steps:
- checkout
- run:
name: Установка зависимостей
command: npm install
- run:
name: Запуск тестов WebdriverIO
command: npm run test
Каждая задача будет выполняться в отдельном контейнере, что ускоряет
общее время выполнения тестов. Для этого в конфигурации WebdriverIO
нужно указать поддержку параллельного выполнения, добавив опцию
maxInstances:
capabilities: [{
browserName: 'chrome',
maxInstances: 5,
'goog:chromeOptions': {
args: ['--headless']
}
}],
CircleCI предлагает разнообразные инструменты для мониторинга результатов тестов и анализа их выполнения. В отчётах можно увидеть информацию о том, какие тесты прошли, а какие не прошли. CircleCI предоставляет подробные логи выполнения пайплайнов, которые можно использовать для диагностики и устранения проблем.
Чтобы ещё более детально анализировать результаты тестирования, можно использовать сторонние отчётные сервисы, такие как Allure или Mochawesome, которые генерируют отчёты с подробной информацией по каждому тесту.
Для интеграции с Allure, например, необходимо установить соответствующие пакеты:
npm install --save-dev @wdio/allure-reporter
После этого нужно настроить WebdriverIO для использования Allure:
reporters: ['spec', 'allure'],
allure: {
outputDir: './allure-results',
disableWebdriverStepsReporting: true,
disableWebdriverScreenshotsReporting: false
}
Использование CircleCI и WebdriverIO для автоматизации тестирования позволяет создать высокоэффективную систему для проверки качества веб-приложений. CircleCI помогает автоматизировать весь процесс — от тестирования до деплоя, при этом обеспечивая гибкость в настройке окружений, параллельном выполнении тестов и мониторинге результатов.