Cypress — мощный инструмент для end-to-end тестирования веб-приложений на JavaScript, который обеспечивает быстрый и надёжный способ проверки функциональности интерфейса. CircleCI, в свою очередь, представляет собой CI/CD платформу, позволяющую автоматизировать процесс сборки, тестирования и деплоя. Совместное использование этих инструментов обеспечивает стабильность разработки и предотвращает появление регрессий на ранних этапах.
Для запуска Cypress в CircleCI требуется корректная конфигурация
окружения. В основе лежит файл .circleci/config.yml,
который описывает последовательность шагов (jobs) и workflow.
Пример базовой структуры config.yml:
version: 2.1
jobs:
cypress-run:
docker:
- image: cypress/base:14
steps:
- checkout
- run:
name: Установка зависимостей
command: npm ci
- run:
name: Запуск тестов Cypress
command: npx cypress run
workflows:
version: 2
test:
jobs:
- cypress-run
Ключевые моменты:
cypress/base, который
содержит Node.js и предустановленные зависимости для Cypress.npm ci гарантирует чистую установку
зависимостей.npx cypress run запускает все тесты без GUI. Для
запуска с браузером и отчетами используется дополнительная
конфигурация.Cypress поддерживает несколько браузеров: Chrome, Firefox, Edge и встроенный Electron. В CircleCI возможно указать конкретный браузер с помощью флага:
npx cypress run --browser chrome
Для ускорения тестирования можно включить параллельный запуск тестов, что особенно важно для больших тестовых наборов. CircleCI поддерживает parallelism, позволяющий разделить тесты на несколько контейнеров.
jobs:
cypress-run:
docker:
- image: cypress/base:14
parallelism: 4
steps:
- checkout
- run:
name: Установка зависимостей
command: npm ci
- run:
name: Запуск тестов Cypress параллельно
command: npx cypress run --record --parallel --key $CYPRESS_RECORD_KEY
Объяснение:
parallelism: 4 делит выполнение на 4 контейнера.--record и --key позволяют отправлять
результаты в Cypress Dashboard, что обеспечивает визуальный контроль
прохождения тестов и детализированные отчеты.Для ускорения CI-пайплайна рекомендуется использовать кэширование
node_modules и Cypress бинарников. CircleCI предоставляет
возможность сохранять и восстанавливать кэш между сборками.
- restore_cache:
keys:
- v1-deps-{{ checksum "package-lock.json" }}
- run:
name: Установка зависимостей
command: npm ci
- save_cache:
paths:
- node_modules
key: v1-deps-{{ checksum "package-lock.json" }}
Это уменьшает время установки зависимостей на повторных сборках и предотвращает лишние загрузки бинарников Cypress.
Cypress автоматически сохраняет скриншоты при падении теста и видео выполнения тестов. CircleCI позволяет сохранять эти артефакты для последующего анализа.
- run:
name: Запуск Cypress с артефактами
command: npx cypress run --record --key $CYPRESS_RECORD_KEY
- store_artifacts:
path: cypress/videos
- store_artifacts:
path: cypress/screenshots
Скриншоты и видео помогают выявлять ошибки, которые не видны в логах, и ускоряют диагностику проблем в интерфейсе.
Для проектов с зависимостями от бэкенда или базы данных удобно запускать Cypress в окружении с Docker Compose. CircleCI поддерживает такой подход через service-образы.
jobs:
cypress-run:
docker:
- image: cypress/base:14
steps:
- checkout
- setup_remote_docker
- run:
name: Запуск контейнеров
command: docker-compose up -d
- run:
name: Установка зависимостей
command: npm ci
- run:
name: Cypress тесты
command: npx cypress run
- run:
name: Остановка контейнеров
command: docker-compose down
Этот подход позволяет тестировать фронтенд вместе с реальными сервисами, что повышает точность тестирования интеграции.
CircleCI позволяет задавать условия запуска workflow в зависимости от ветки или событий pull request. Это удобно для ограничения нагрузки на CI и прогонов тестов только там, где это необходимо.
workflows:
version: 2
test:
jobs:
- cypress-run:
filters:
branches:
only:
- main
- develop
pull_requests:
only: /.*/
Таким образом, Cypress-тесты будут выполняться при каждом pull request и на ключевых ветках разработки, обеспечивая контроль качества перед слиянием.
Cypress легко интегрируется с инструментами покрытия кода, например
nyc или c8. CircleCI можно настроить на
генерацию и публикацию отчетов в формате lcov или HTML:
- run:
name: Запуск Cypress с покрытием
command: npx cypress run --env coverage=true
- store_artifacts:
path: coverage
Это позволяет отслеживать, насколько тесты покрывают критические участки приложения, и выявлять зоны, требующие дополнительного тестирования.
Интеграция Cypress с CircleCI обеспечивает автоматизированный, надежный и масштабируемый процесс тестирования веб-приложений. Гибкая настройка параллельного запуска, артефактов, кэширования и workflow делает возможным построение CI/CD, соответствующего требованиям крупных проектов и ускоряющего разработку без потери качества.