ФАЗА 48. E2E CI

Прогон ускоряется параллелью и читается по артефактам

Sharding · Traces · Reports

CI устанавливает браузеры и зависимости, workers и shards распределяют тесты, HTML-отчёт, trace и скриншоты объясняют падение.

1. CI повторяет локальную установку

1 / 5

Зависимости ставятся из lockfile, браузеры и системные пакеты устанавливаются, приложение поднимается и становится доступным по healthcheck.

  • Версии совпадают.
  • Кэш не скрывает установку.
  • Сервер готов до тестов.
InstallBrowser и appPlaywright run

2. Workers и shards распределяют время

2 / 5

Независимые тесты идут параллельно, shard получает подмножество сценариев, общие ресурсы не делятся случайно.

  • Изоляция обязательна.
  • Число workers ограничено ресурсами.
  • Все shards завершаются.
CI runWorker AWorker BShard C

3. Артефакт сохраняет факт падения

3 / 5

Screenshot, video, console и trace показывают действие, DOM и сеть в момент ошибки, HTML-отчёт связывает их со сценарием.

  • Trace доступен команде.
  • Срок хранения задан.
  • Секреты маскируются.
ПадениеHTML reportTrace и screenshot

4. CI среда требует диагностики отличий

4 / 5

Headless режим, ресурсы, timezone, viewport и сеть отличаются от laptop, логи конфигурации помогают воспроизвести условия локально.

  • Окружение записано.
  • Медленный предел измерен.
  • Повторное увеличение sleep не решение.
Локальный запускCI запуск

5. Набор разделяется по обратной связи

5 / 5

Критический smoke идёт на каждый PR, полный regression по расписанию или релизу, flaky не игнорируется ради скорости.

  • Быстрый сигнал сохраняется.
  • Полный набор не теряется.
  • Владелец падения назначается.
PR smokeScheduled regressionРазбор и исправление

E2E-тесты в CI: запуск, ускорение и разбор падений

← назад к разделу

E2E-тесты не защищают от регрессий, если их гонять «когда вспомнил» вручную. Они работают только в связке с конвейером: каждое изменение → автоматический прогон → результат виден команде. Но у сквозных тестов есть особенность: они медленные. Поэтому в CI важны две вещи — уложиться по времени и дать разбираемый отчёт о падении, чтобы чинить без воспроизведения локально.

Как устроен запуск

Playwright в CI работает без окна браузера (headless-режим). Браузеры нужно установить заранее — это делается один раз в начале шага.

Минимальный пайплайн выглядит так:

- run: npm ci
- run: npx playwright install --with-deps
- run: npx playwright test

Перед запуском тестов должно работать само приложение. Можно поднять его вручную в пайплайне, а можно дать Playwright сделать это самому через webServer в конфиге — он запустит приложение и дождётся готовности перед первым тестом:

// playwright.config.ts
webServer: {
  command: "npm run start",
  url: "http://localhost:3000",
  reuseExistingServer: !process.env.CI,
},

В CI переменная CI всегда выставлена, поэтому каждый прогон поднимает свежий сервер.

Проблема скорости — и как её решают

E2E-тест открывает браузер, кликает, ждёт ответа сервера. Один тест — несколько секунд. Сто тестов — минуты. По мере роста проекта набор тестов растёт, и суммарное время пайплайна становится неприемлемым.

Два инструмента решают это:

Параллельные воркеры — Playwright по умолчанию запускает тесты параллельно в нескольких воркерах на одной машине. Количество воркеров настраивается в конфиге или флагом --workers.

Sharding — разбивка набора между несколькими машинами. Каждая машина берёт свою часть и гоняет её параллельно с остальными:

strategy:
  matrix:
    shard: [1, 2, 3, 4]
steps:
  - run: npx playwright test --shard=${{ matrix.shard }}/4

Четыре раннера вместо одного — набор завершается примерно вчетверо быстрее. Число частей выбирают исходя из размера набора и желаемого времени.

Почему падения в CI так тяжело чинить

Классическая ситуация: тест прошёл локально, упал в CI. Воспроизвести не получается — окружение другое, данные другие, гонки таймингов. Без записи прогона приходится гадать.

Playwright решает это через артефакты падения. Три инструмента:

Trace — полная запись прогона: каждый шаг, состояние DOM в момент выполнения, сетевые запросы, консоль. Открывается в Trace Viewer — можно промотать к любому шагу и посмотреть, что было на странице. Обычно включают on-first-retry: первый провал идёт без trace, если тест падает снова — запись включается.

Скриншот — снимок страницы в момент падения.

Видео — запись всего прогона теста.

use: {
  trace: "on-first-retry",
  screenshot: "only-on-failure",
  video: "retain-on-failure",
},

Эти файлы сохраняются как артефакты CI-шага — их можно скачать и изучить после прогона.

HTML-отчёт

Playwright генерирует HTML-отчёт: список тестов, время каждого, статус, ссылки на артефакты падений. Отчёт публикуют как артефакт CI — и каждый в команде видит картину прогона без того, чтобы лезть в сырые логи.

Зелёный статус — всё прошло. Красный — кликнуть на упавший тест, открыть trace, разобраться.

Когда гонять и что именно

Не все тесты нужны на каждый коммит. E2E — дорогие, и гонять тяжёлый полный набор на каждое изменение замедляет разработку. Практичная стратегия:

каждый PR вход главный сценарий оплата релиз, расписание полный набор длинные и редкие

На PR быстрый набор критических путей, перед релизом или по расписанию полный прогон.

  • На каждый PR — только критические пути: вход, главный сценарий, оплата (если есть). Быстрый набор, который не даёт пропустить поломку главного.
  • Перед релизом или по расписанию — полный набор, включая длинные и редкие сценарии.

Таким образом разработчик получает быструю обратную связь на PR, а полная уверенность формируется перед каждым выпуском.

Коротко

  • Playwright в CI работает headless; браузеры устанавливают через npx playwright install --with-deps.
  • webServer в конфиге поднимает приложение перед прогоном — удобно для CI без ручных шагов.
  • Воркеры распараллеливают тесты на одной машине, sharding — между несколькими раннерами.
  • Trace (on-first-retry), скриншот и видео при падении делают разбор возможным без локального воспроизведения.
  • HTML-отчёт показывает результаты и артефакты всей команде.
  • Критические пути — на каждый PR; полный набор — перед релизом или по расписанию.

Что почитать дальше