Трассировка выполнения

Трассировка выполнения — это один из ключевых инструментов в тестировании с помощью Playwright. Она позволяет фиксировать последовательность действий теста, видеть состояние элементов на странице, а также анализировать причины сбоев и ошибок. Playwright предоставляет встроенные механизмы для генерации и сохранения трассировок, которые можно изучать в интерактивном формате.

Включение трассировки

Трассировка включается на уровне браузерного контекста. Для этого используется метод context.tracing.start(). Основные параметры:

  • name — название сессии трассировки.
  • screenshots — логическое значение, указывающее, нужно ли сохранять скриншоты.
  • snapshots — сохранять ли DOM-снимки страницы на каждом шаге.
  • sources — включение исходных файлов, чтобы видеть скрипты и ресурсы.

Пример:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext();

  await context.tracing.start({ screenshots: true, snapshots: true, sources: true });

  const page = await context.newPage();
  await page.goto('https://example.com');
  await page.click('text=More information');
  
  await context.tracing.stop({ path: 'trace.zip' });
  await browser.close();
})();

В этом примере трассировка фиксирует каждый шаг выполнения теста, включая скриншоты и DOM-снимки, и сохраняет результаты в архив trace.zip.

Анализ трассировки

Файл трассировки в формате .zip открывается через Playwright CLI или в браузере с использованием встроенного просмотрщика. Основные возможности анализа:

  • Просмотр шагов теста — каждая команда, выполняемая на странице, отображается с указанием типа действия (click, fill, navigate).
  • Скриншоты и DOM — можно увидеть, как выглядела страница в момент выполнения конкретного действия.
  • События и ошибки — лог действий включает сетевые запросы, console.log, предупреждения и ошибки JavaScript.

Для открытия трассировки используется команда:

npx playwright show-trace trace.zip

Контроль размера и производительности

Трассировка может значительно увеличивать объем данных и замедлять выполнение тестов. Рекомендуется включать её выборочно:

  • Для отдельных критичных сценариев.
  • Только на ошибочные прогоны при локальном или CI-тестировании.
  • Использовать опцию snapshots: false и screenshots: false, если требуется только лог действий.

Интеграция с CI/CD

Трассировка особенно полезна при интеграции с системами непрерывной интеграции:

  • Архив .zip можно сохранять как артефакт сборки.
  • В случае падения теста можно автоматически открывать трассировку для анализа.
  • Снижается время на поиск причин сбоев без необходимости повторного запуска тестов вручную.

Программное управление трассировкой

Playwright позволяет динамически включать и останавливать трассировку в середине сценария. Например:

await context.tracing.start({ screenshots: true });

await page.goto('https://example.com');
await context.tracing.stop({ path: 'initial_trace.zip' });

await context.tracing.start({ screenshots: true });
await page.click('text=Next step');
await context.tracing.stop({ path: 'step2_trace.zip' });

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

Практические рекомендации

  • Всегда указывать path при остановке трассировки, чтобы результаты сохранялись в читаемом формате.
  • Использовать screenshots: true для визуальной диагностики UI-проблем.
  • Ограничивать трассировку по времени и объему данных, чтобы не перегружать CI/CD систему.
  • Совмещать трассировку с логированием сетевых запросов и консоли для полного понимания поведения страницы.

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