Playwright предоставляет встроенные средства для отчётности о
результатах тестов, включая форматы list,
json, html и junit. Однако для
сложных проектов стандартных отчётов часто недостаточно. В таких случаях
на помощь приходят custom reporters — пользовательские
репортеры, позволяющие собирать, фильтровать и визуализировать данные
тестирования по собственным правилам.
Custom reporter в Playwright реализуется как класс, который наследует
функциональность Reporter. Основные методы, которые можно
переопределить для расширенной аналитики:
onBegin(config, suite) — вызывается перед стартом всех
тестов. Здесь можно инициализировать логирование, создавать файлы
отчётов или подключать сторонние сервисы аналитики.onTestBegin(test) — срабатывает при начале выполнения
отдельного теста. Используется для отметки времени начала, запуска
таймеров или логирования дополнительной информации.onTestEnd(test, result) — основной метод для сбора
результатов теста. Содержит объект result, включающий
статус (passed, failed, skipped),
время выполнения, ошибки и трассировки.onEnd(result) — вызывается после завершения всех
тестов. Подходит для агрегации данных, генерации итоговых отчётов и
интеграции с внешними системами мониторинга.Каждый из этих методов можно использовать для построения сложной аналитики, включая фильтрацию по тегам, измерение производительности тестов, подсчёт стабильности и исторических трендов.
Простейший пример репортера, который собирает статистику по тестам и сохраняет её в JSON:
const fs = require('fs');
class JsonAnalyticsReporter {
constructor() {
this.results = [];
}
onTestEnd(test, result) {
this.results.push({
title: test.title,
status: result.status,
duration: result.duration,
error: result.error ? result.error.message : null
});
}
onEnd() {
fs.writeFileSync('analytics.json', JSON.stringify(this.results, null, 2));
}
}
module.exports = JsonAnalyticsReporter;
Здесь каждый тест фиксируется с ключевыми параметрами, а после завершения всех тестов создаётся структурированный JSON для дальнейшей аналитики.
Custom reporters позволяют отправлять данные не только в файлы, но и в API или базы данных. Например, для отправки статистики в сервис мониторинга:
const axios = require('axios');
class RemoteAnalyticsReporter {
constructor() {
this.results = [];
}
onTestEnd(test, result) {
this.results.push({
testName: test.title,
status: result.status,
duration: result.duration
});
}
async onEnd() {
await axios.post('https://analytics.example.com/test-results', this.results);
}
}
module.exports = RemoteAnalyticsReporter;
Таким образом можно автоматически собирать метрики, строить графики производительности и отслеживать стабильность тестов в динамике.
Custom reporter хорошо сочетается с hooks Playwright
(beforeAll, afterAll, beforeEach,
afterEach). Это позволяет расширять отчётность:
Например, можно автоматически добавлять скриншоты падений:
onTestEnd(test, result) {
const entry = {
title: test.title,
status: result.status
};
if (result.status === 'failed' && result.attachments) {
entry.screenshots = result.attachments
.filter(a => a.name === 'screenshot')
.map(a => a.path);
}
this.results.push(entry);
}
Custom reporters дают возможность фильтровать и агрегировать данные перед выводом:
Пример агрегации по статусу:
onEnd() {
const summary = this.results.reduce((acc, r) => {
acc[r.status] = (acc[r.status] || 0) + 1;
return acc;
}, {});
console.log('Test summary:', summary);
}
Для подключения собственного репортера необходимо указать его в файле
playwright.config.js:
const JsonAnalyticsReporter = require('./reporters/jsonAnalyticsReporter');
module.exports = {
reporter: [
['list'],
[JsonAnalyticsReporter]
],
};
Можно комбинировать несколько репортеров одновременно: стандартные и кастомные, что позволяет одновременно получать визуальные отчёты и собирать структурированные данные для аналитики.
Custom reporters превращают Playwright из инструмента для функционального тестирования в полноценную платформу для расширенной аналитики и мониторинга качества кода.