GitLab CI конфигурация

Основы настройки GitLab CI для Playwright

GitLab CI/CD — это система непрерывной интеграции и доставки, которая позволяет автоматически запускать тесты, собирать и деплоить приложения при каждом изменении в коде. Playwright — это современная библиотека для автоматизации тестирования веб-приложений. Для интеграции Playwright с GitLab CI необходимо настроить соответствующий конфигурационный файл, который будет определять, как и когда запускать тесты.

Конфигурационный файл .gitlab-ci.yml описывает пайплайны, состоящие из различных этапов (jobs), которые выполняются на определенных стадиях процесса CI/CD. В случае с Playwright пайплайн должен включать установку зависимостей, запуск тестов, а также, возможно, деплой и другие этапы.

Основные этапы конфигурации

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

Для начала необходимо определить, как будет происходить установка всех зависимостей, включая Playwright. В этом случае важным шагом является установка всех нужных пакетов, включая браузеры, которые Playwright использует для тестирования.

stages:
  - install
  - test

install_dependencies:
  stage: install
  image: node:16
  before_script:
    - npm ci
  script:
    - npx playwright install

В этом примере:

  • node:16 — это образ Docker, который используется для установки Node.js и всех зависимостей.
  • npm ci используется для установки зависимостей проекта согласно package-lock.json.
  • npx playwright install — команда для установки браузеров, поддерживаемых Playwright.

2. Запуск тестов

Для запуска тестов необходимо создать отдельный этап в пайплайне, который будет отвечать за выполнение тестов с использованием Playwright.

run_tests:
  stage: test
  image: mcr.microsoft.com/playwright:v1.23.0-focal
  script:
    - npx playwright test
  artifacts:
    paths:
      - test-results
  only:
    - merge_requests
    - master

В этом случае:

  • Используется образ playwright:v1.23.0-focal, который уже содержит все необходимые браузеры и инструменты для тестирования.
  • npx playwright test запускает тесты, написанные с использованием Playwright.
  • Результаты тестов сохраняются в папке test-results, чтобы они были доступны после выполнения.
  • Тесты запускаются только при событиях в ветке master или при создании merge request.

3. Обработка результатов тестирования

После того как тесты будут выполнены, важно сохранить результаты в GitLab и обеспечить возможность их просмотра. Для этого можно использовать артефакты. В предыдущем примере результат тестов сохраняется в директорию test-results, которая автоматически будет доступна через интерфейс GitLab.

Кроме того, можно настроить отчеты о тестах, чтобы они были более наглядными и удобными для анализа. Для этого Playwright поддерживает создание отчетов в формате JUnit, который можно легко интегрировать с GitLab.

run_tests:
  stage: test
  image: mcr.microsoft.com/playwright:v1.23.0-focal
  script:
    - npx playwright test --reporter=junit
  artifacts:
    paths:
      - test-results
  only:
    - merge_requests
    - master

Здесь используется параметр --reporter=junit, чтобы тесты генерировали отчеты в формате JUnit, который GitLab может использовать для отображения результатов тестов в своем интерфейсе.

Дополнительные настройки

Установка браузеров

Для выполнения тестов Playwright необходимо, чтобы на CI-сервере были установлены браузеры, такие как Chromium, Firefox и WebKit. В Docker-образе mcr.microsoft.com/playwright эти браузеры уже установлены. Однако если используется кастомный образ или тесты выполняются в другом окружении, нужно позаботиться о ручной установке браузеров.

install_browsers:
  stage: install
  image: node:16
  script:
    - npm ci
    - npx playwright install

Кэширование зависимостей

Для ускорения процесса сборки можно настроить кэширование зависимостей. GitLab CI поддерживает кэширование директорий и файлов между пайплайнами, что позволяет избежать повторной загрузки зависимостей и ускоряет работу системы.

cache:
  paths:
    - node_modules/
    - .npm/

В этом примере кэшируются директории node_modules/ и .npm/, чтобы ускорить установку зависимостей в будущих пайплайнах.

Разделение тестов по окружениям

Если в проекте используется несколько окружений (например, staging и production), можно настроить разные пайплайны или этапы для каждого из них. В зависимости от ветки или других условий, можно запускать различные тесты.

run_tests_staging:
  stage: test
  image: mcr.microsoft.com/playwright:v1.23.0-focal
  script:
    - npx playwright test --project=staging
  only:
    - staging

run_tests_production:
  stage: test
  image: mcr.microsoft.com/playwright:v1.23.0-focal
  script:
    - npx playwright test --project=production
  only:
    - master

В этом примере тесты для ветки staging будут запускаться с проектом staging, а для ветки master — с проектом production.

Параллельное выполнение тестов

Playwright поддерживает параллельное выполнение тестов, что позволяет существенно ускорить процесс тестирования. В GitLab CI можно настроить параллельный запуск нескольких этапов или тестов.

run_tests_parallel:
  stage: test
  image: mcr.microsoft.com/playwright:v1.23.0-focal
  script:
    - npx playwright test --project=staging --workers=4
  only:
    - master

Параметр --workers=4 позволяет запустить тесты с 4 параллельными процессами, что ускоряет выполнение тестов, если их много.

Поддержка контейнеризации

GitLab CI прекрасно работает с Docker-контейнерами, что дает возможность изолировать среду выполнения тестов. В случае с Playwright можно использовать уже готовые образы, такие как mcr.microsoft.com/playwright, которые включают в себя все необходимые компоненты для работы. Это позволяет избежать необходимости ручной настройки браузеров и библиотек.

run_tests:
  stage: test
  image: mcr.microsoft.com/playwright:v1.23.0-focal
  script:
    - npx playwright test

Пример полной конфигурации

stages:
  - install
  - test

install_dependencies:
  stage: install
  image: node:16
  before_script:
    - npm ci
  script:
    - npx playwright install

run_tests:
  stage: test
  image: mcr.microsoft.com/playwright:v1.23.0-focal
  script:
    - npx playwright test --reporter=junit
  artifacts:
    paths:
      - test-results
  only:
    - merge_requests
    - master

cache:
  paths:
    - node_modules/
    - .npm/

install_browsers:
  stage: install
  image: node:16
  script:
    - npm ci
    - npx playwright install

Этот пример охватывает все основные этапы: установку зависимостей, выполнение тестов и создание отчетов, а также использование кэширования для ускорения работы.