Параллельное выполнение и отчётность
Updated Jul 2026
Быстрая обратная связь — это разница между тестами, которые разработчики запускают, и тестами, которые они пропускают. Встроенная параллельность, шардинг и интеграция с CI в Playwright сокращают 60-минутный набор тестов до минут — без внешней инфраструктуры вроде Selenium Grid.
Параллельное выполнение
Playwright запускает тесты параллельно по умолчанию, используя рабочие процессы (воркеры). Каждый воркер получает собственный экземпляр браузера с изолированными контекстами.
Как работают воркеры
Воркер 1: login.spec.ts → запускает все тесты файла последовательно
Воркер 2: checkout.spec.ts → запускает все тесты файла последовательно
Воркер 3: search.spec.ts → запускает все тесты файла последовательно
Воркер 4: admin.spec.ts → запускает все тесты файла последовательно
По умолчанию тесты в одном файле выполняются последовательно; тесты в разных файлах — параллельно между воркерами.
// playwright.config.ts
export default defineConfig({
workers: process.env.CI ? 4 : undefined, // undefined = половина ядер CPU
fullyParallel: true, // Также параллелизация тестов внутри файла
});
Управление параллельностью
// Последовательное выполнение конкретных тестов (например, с общим внешним состоянием)
test.describe.serial('процесс оплаты', () => {
test('добавление в корзину', async ({ page }) => { /* ... */ });
test('ввод доставки', async ({ page }) => { /* ... */ });
test('завершение оплаты', async ({ page }) => { /* ... */ });
});
// Настройка воркеров для каждого проекта
export default defineConfig({
projects: [
{ name: 'chromium', use: { browserName: 'chromium' } },
{ name: 'api-tests', testMatch: /.*\.api\.ts/, workers: 8 }, // Больше воркеров для API-тестов
],
});
Шардинг между машинами CI
Для больших наборов тестов разделите выполнение между несколькими машинами CI:
# Машина 1: выполняет первую четверть тестов
npx playwright test --shard=1/4
# Машина 2: выполняет вторую четверть
npx playwright test --shard=2/4
# Машина 3: выполняет третью четверть
npx playwright test --shard=3/4
# Машина 4: выполняет последнюю четверть
npx playwright test --shard=4/4
Пример GitHub Actions
# .github/workflows/e2e.yml
jobs:
test:
strategy:
matrix:
shard: [1/4, 2/4, 3/4, 4/4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
- run: npx playwright install --with-deps
- run: npx playwright test --shard=${{ matrix.shard }}
- uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-${{ matrix.shard }}
path: test-results/
Интеграция с CI/CD
Docker
Playwright предоставляет официальные Docker-образы со всеми предустановленными браузерами:
FROM mcr.microsoft.com/playwright:v1.50.0-noble
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npx playwright test
Распространённые CI-паттерны
| Паттерн | Цель |
|---|---|
| Запуск на PR | Обнаружение регрессий до мержа |
| Smoke-тесты при деплое | Проверка работоспособности деплоя |
| Полный набор ночью | Комплексная регрессионная проверка |
| Шардинг между машинами | Сокращение реального времени выполнения |
| Загрузка артефактов | Сохранение трейсов и скриншотов для отладки |
Trace Viewer
Trace Viewer в Playwright — самый мощный инструмент отладки для сбоев в CI. Он записывает полную временную шкалу каждого действия, сетевого запроса, снимка DOM и сообщения консоли.
Включение трейсов
// playwright.config.ts
export default defineConfig({
use: {
trace: 'on-first-retry', // Запись трейсов только при повторных запусках
// Другие варианты: 'on', 'off', 'retain-on-failure'
},
});
Просмотр трейсов
# Открытие trace viewer локально
npx playwright show-trace test-results/login-test/trace.zip
# Или откройте онлайн-просмотрщик и перетащите файл трейса
# https://trace.playwright.dev
Trace Viewer показывает:
- Временная шкала: Каждое действие со скриншотами до и после
- Сеть: Все HTTP-запросы и ответы
- Консоль: Вывод консоли браузера
- Исходный код: Код теста с подсвеченной строкой ошибки
- Снимок DOM: Инспекция состояния страницы в любой момент времени
HTML-отчёт
# Генерация и открытие отчёта
npx playwright show-report
# Отчёт включает:
# - Сводку прохождения/падения по каждому браузеру
# - Результаты отдельных тестов с длительностью
# - Скриншоты и трейсы для упавших тестов
# - Историю повторных запусков
Объединение отчётов шардов
При шардинге между машинами объедините отдельные отчёты:
npx playwright merge-reports ./shard-results --reporter=html
Стратегия повторных запусков
export default defineConfig({
retries: process.env.CI ? 2 : 0, // Повтор дважды в CI, никогда локально
});
// Переопределение повторов для конкретного теста
test('нестабильный внешний сервис', async ({ page }) => {
test.fixme(); // Пометить как известно-нестабильный, пропускать до исправления
});
Расследование нестабильных тестов
- Проверьте Trace Viewer на проблемы с таймингом
- Ищите отсутствующие
await - Проверьте общее состояние между тестами
- Проверьте зависимость от внешних сервисов
- Убедитесь, что локаторы стабильны (не зависят от позиции)
Ключевые выводы
- Playwright параллелизирует тесты через рабочие процессы — внешняя инфраструктура Grid не нужна
- Шардинг между машинами CI для линейного ускорения больших наборов тестов
- Trace Viewer — основной инструмент отладки сбоев в CI; включите
trace: 'on-first-retry' - Используйте Docker с официальными образами Playwright для воспроизводимых CI-окружений
- Загружайте артефакты тестов (трейсы, скриншоты) в CI для расследования после сбоя
- Повторяйте в CI, но не локально — локальные сбои должны расследоваться немедленно