В автоматизированном тестировании важно не только проверять функциональность, но и фиксировать события падений тестов для последующего анализа. Playwright предоставляет встроенные механизмы для отслеживания ошибок, логирования и реагирования на исключительные ситуации. Алертинг при падении включает три ключевых аспекта: перехват исключений, сбор данных о состоянии приложения и уведомление команды о проблеме.
Playwright использует промисы и асинхронные функции, поэтому основным
инструментом обработки ошибок является конструкция
try...catch. Пример базовой структуры:
const { test, expect } = require('@playwright/test');
test('пример обработки падения', async ({ page }) => {
try {
await page.goto('https://example.com');
await expect(page.locator('h1')).toHaveText('Заголовок');
} catch (error) {
console.error('Тест завершился с ошибкой:', error);
throw error; // Обязательно пробрасывать ошибку дальше для корректного отчета
}
});
Ключевые моменты:
try, фиксируется в
catch.Для эффективного алертинга критично сохранять данные о состоянии тестируемого приложения. Playwright предоставляет средства для скриншотов, видео и логов сети.
Скриншоты:
await page.screenshot({ path: `screenshots/failure-${Date.now()}.png`, fullPage: true });
Видео:
В конфигурации тестов можно включить запись видео:
// playwright.config.js
module.exports = {
use: {
video: 'on',
},
};
Видео автоматически сохраняется для всех падений тестов.
Логи сети:
page.on('requestfailed', request => {
console.log(`Не удалось выполнить запрос: ${request.url()} - ${request.failure().errorText}`);
});
Таким образом можно фиксировать ошибки на уровне HTTP-запросов, что особенно важно для тестирования сложных SPA.
Сбор данных сам по себе не предупреждает команду о проблеме. Для полноценного алертинга используются внешние интеграции. Наиболее распространенные варианты: Slack, Email, системы мониторинга типа Sentry.
Пример отправки уведомления в Slack при падении теста:
const fetch = require('node-fetch');
async function sendSlackAlert(message) {
await fetch('https://hooks.slack.com/services/TOKEN', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: message }),
});
}
test('тест с алертом', async ({ page }) => {
try {
await page.goto('https://example.com');
await expect(page.locator('h1')).toHaveText('Неверный заголовок');
} catch (error) {
await page.screenshot({ path: `screenshots/failure-${Date.now()}.png`, fullPage: true });
await sendSlackAlert(`Тест упал: ${error.message}`);
throw error;
}
});
Особенности организации алертов:
Для более крупных проектов можно централизовать обработку падений с использованием глобальных хуков Playwright:
// global-setup.js
const { chromium } = require('@playwright/test');
module.exports = async () => {
process.on('unhandledRejection', async (reason) => {
console.error('Необработанное исключение:', reason);
// Здесь можно добавить отправку уведомления
});
};
Использование хуков позволяет фиксировать ошибки, которые возникают вне конкретного теста, например, при настройке окружения.
При запуске тестов в CI/CD важно, чтобы алерты были автоматизированы и не требовали ручного вмешательства:
artifacts
в GitLab CI, actions/upload-artifact в GitHub
Actions).Эффективный алертинг при падении тестов повышает скорость обнаружения проблем и качество поддержки автоматизации. Playwright предоставляет все необходимые инструменты для реализации такой системы, включая встроенные хуки, возможности записи видео и скриншотов, а также гибкую интеграцию с внешними системами уведомлений.