Playwright предоставляет развитые возможности для отслеживания и мониторинга тестов, что позволяет автоматически выявлять сбои, собирать подробные логи и метрики, а также интегрироваться с внешними системами отчетности.
Для мониторинга прохождения тестов важно включить детальное логирование:
import { test, expect } from '@playwright/test';
test('проверка загрузки страницы', async ({ page }) => {
console.log('Начало теста: загрузка главной страницы');
await page.goto('https://example.com');
console.log('Страница загружена, проверяем заголовок');
const title = await page.title();
expect(title).toBe('Example Domain');
});
Ключевые моменты:
console.log помогает фиксировать шаги теста для
последующего анализа.fs,
winston, pino).test.info() для сбора данныхPlaywright предоставляет объект test.info(), который
хранит информацию о текущем тесте:
test('тест с метаданными', async ({ page }, testInfo) => {
await page.goto('https://example.com');
if (page.url() !== 'https://example.com/') {
testInfo.attach('screenshot', {
body: await page.screenshot(),
contentType: 'image/png'
});
}
});
testInfo.attach() позволяет прикреплять скриншоты,
видео или текстовые файлы к отчету о тесте.Playwright поддерживает встроенные репортеры:
// playwright.config.js
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [
['list'], // вывод в консоль
['html', { open: 'never' }], // HTML отчет
['json', { outputFile: 'test-results.json' }] // JSON отчет для CI
]
});
Рекомендации:
Playwright автоматически фиксирует длительность каждого теста, что позволяет выявлять медленные сценарии:
test('замер времени выполнения', async ({ page }, testInfo) => {
const start = Date.now();
await page.goto('https://example.com');
const duration = Date.now() - start;
console.log(`Тест выполнялся ${duration} мс`);
});
Для мониторинга прохождения тестов важно использовать визуальные артефакты:
export default defineConfig({
use: {
screenshot: 'only-on-failure',
video: 'retain-on-failure'
}
});
screenshot: 'only-on-failure' делает скриншоты только
при падении теста.video: 'retain-on-failure' сохраняет видео выполнения
теста для последующего анализа.Playwright легко интегрируется с системами мониторинга и алертинга:
Пример отправки уведомления в Slack через веб-хук:
import fetch from 'node-fetch';
async function notifySlack(message) {
await fetch('https://hooks.slack.com/services/XXX/YYY/ZZZ', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: message })
});
}
test.afterEach(async ({}, testInfo) => {
if (testInfo.status !== testInfo.expectedStatus) {
await notifySlack(`Тест "${testInfo.title}" завершился с ошибкой`);
}
});
Для полноценного мониторинга полезно собирать метрики:
Эти данные помогают выявлять нестабильные тесты и оптимизировать инфраструктуру.
Playwright тесно интегрируется с CI/CD системами. Основные подходы:
# пример GitHub Actions workflow
name: Playwright Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '20'
- run: npm ci
- run: npx playwright test --reporter=html
- uses: actions/upload-artifact@v3
with:
name: playwright-report
path: playwright-report
Использование CI/CD обеспечивает постоянное наблюдение за состоянием проекта и автоматический сбор информации о падениях тестов.