Modern QA2026Параллельное выполнение и отчётность
Join

Course13 Browser Automation with Playwright

Foundations · Chapter 13

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

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(); // Пометить как известно-нестабильный, пропускать до исправления
});

Расследование нестабильных тестов

  1. Проверьте Trace Viewer на проблемы с таймингом
  2. Ищите отсутствующие await
  3. Проверьте общее состояние между тестами
  4. Проверьте зависимость от внешних сервисов
  5. Убедитесь, что локаторы стабильны (не зависят от позиции)

Ключевые выводы

  • Playwright параллелизирует тесты через рабочие процессы — внешняя инфраструктура Grid не нужна
  • Шардинг между машинами CI для линейного ускорения больших наборов тестов
  • Trace Viewer — основной инструмент отладки сбоев в CI; включите trace: 'on-first-retry'
  • Используйте Docker с официальными образами Playwright для воспроизводимых CI-окружений
  • Загружайте артефакты тестов (трейсы, скриншоты) в CI для расследования после сбоя
  • Повторяйте в CI, но не локально — локальные сбои должны расследоваться немедленно