CircleCI и автоматизация

CircleCI — одна из самых популярных платформ для автоматической интеграции и развертывания (CI/CD). Она позволяет значительно ускорить процессы разработки, автоматизируя тестирование, сборку и деплой приложений. В связке с WebdriverIO она становится мощным инструментом для автоматизации тестирования веб-приложений, обеспечивая непрерывную проверку качества кода и непрерывную интеграцию.

Основы CircleCI

CircleCI работает по принципу создания пайплайнов (цепочек процессов), которые выполняются автоматически при каждом коммите в репозиторий. Важнейшая часть настройки CircleCI — это файл конфигурации .circleci/config.yml, в котором определяются шаги, которые должны выполняться на каждом этапе. Конфигурация может включать в себя сборку, тестирование, деплой и другие процессы.

В процессе настройки можно указать, какие именно шаги должны выполняться в зависимости от ветки, этапа разработки или успешности предыдущих шагов. CircleCI интегрируется с GitHub, Bitbucket и другими системами управления версиями, что позволяет автоматически запускать пайплайны при изменениях в репозиториях.

Интеграция WebdriverIO с CircleCI

WebdriverIO — это популярная библиотека для тестирования веб-приложений, которая поддерживает как написание тестов, так и их автоматическое выполнение в браузерах. Использование WebdriverIO в CircleCI позволяет автоматически запускать тесты при каждом изменении кода. Это гарантирует, что все новые изменения в проекте не ломают функциональность и соответствуют заранее определённым требованиям.

Чтобы интегрировать WebdriverIO с CircleCI, нужно выполнить несколько простых шагов.

1. Подготовка окружения

Первоначально необходимо настроить окружение 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

2. Установка WebdriverIO и зависимостей

В вашем проекте должны быть установлены необходимые зависимости, включая 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, который используется для настройки тестов.

3. Конфигурация WebdriverIO для CircleCI

Для корректной работы тестов в 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']
};

4. Запуск тестов в CircleCI

После настройки всех зависимостей и конфигурации 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.

Использование Parallelism для ускорения тестирования

Одним из ключевых преимуществ 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 помогает автоматизировать весь процесс — от тестирования до деплоя, при этом обеспечивая гибкость в настройке окружений, параллельном выполнении тестов и мониторинге результатов.