В Playwright, как и в других фреймворках для автоматизации
тестирования, хуки before и after играют
важную роль в организации и настройке тестов. Эти хуки позволяют
предварительно настроить тестовую среду, выполнить действия до или после
каждого теста, а также провести необходимые очистки после выполнения
тестов. Использование хуков значительно улучшает структуру тестов,
повышая их гибкость и упрощая поддержку.
beforeХук before выполняется один раз перед запуском тестов
или набора тестов. Это идеальное место для выполнения операций, которые
должны быть выполнены до начала тестирования, таких как:
В Playwright можно использовать несколько вариантов этого хука, в зависимости от того, на каком уровне тестирования он нужен.
before на уровне всего файла тестов:const { test, before } = require('@playwright/test');
before(async () => {
// Подключение к тестовому серверу
await connectToTestServer();
});
test('Тест 1', async ({ page }) => {
await page.goto('https://example.com');
// Тестовый код...
});
В этом примере хук before выполняется один раз перед
всеми тестами в файле. Это удобно, когда нужно подготовить общие
ресурсы, которые могут быть использованы во всех тестах.
before для каждого теста:const { test, before } = require('@playwright/test');
test.beforeEach(async () => {
// Выполнение действий перед каждым тестом
await resetDatabase();
});
test('Тест 1', async ({ page }) => {
await page.goto('https://example.com');
// Тестовый код...
});
В данном случае хук beforeEach выполняется перед каждым
тестом, что полезно, если необходимо подготовить тестовую среду перед
каждым запуском.
afterХук after выполняется после выполнения тестов или набора
тестов. Его используют для выполнения действий, которые должны быть
выполнены после тестирования, таких как:
Использование хука after помогает предотвратить утечку
ресурсов и гарантирует, что тесты не оставляют за собой ненужных
побочных эффектов.
after на уровне всего файла тестов:const { test, after } = require('@playwright/test');
after(async () => {
// Завершение работы с тестовым сервером
await disconnectFromTestServer();
});
test('Тест 1', async ({ page }) => {
await page.goto('https://example.com');
// Тестовый код...
});
Здесь хук after выполняется один раз после всех тестов в
файле. Это удобно для очистки глобальных ресурсов.
after для каждого теста:const { test, afterEach } = require('@playwright/test');
test.afterEach(async () => {
// Очистка базы данных после каждого теста
await clearTestData();
});
test('Тест 1', async ({ page }) => {
await page.goto('https://example.com');
// Тестовый код...
});
Хук afterEach выполняется после каждого теста, что
полезно для локальной очистки, которая требуется после каждого
теста.
Как и большинство операций в Playwright, хуки before и
after поддерживают асинхронные операции. Если требуется
выполнение асинхронной задачи, можно использовать
async/await для ожидания выполнения операций до того, как
продолжится выполнение тестов. Это особенно важно при работе с внешними
ресурсами, такими как базы данных или веб-сервисы, где нужно
гарантировать завершение действий до перехода к следующему тесту.
const { test, before, after } = require('@playwright/test');
before(async () => {
await setupDatabaseConnection();
});
after(async () => {
await closeDatabaseConnection();
});
test('Тест 1', async ({ page }) => {
await page.goto('https://example.com');
// Тестовый код...
});
В этом примере setupDatabaseConnection и
closeDatabaseConnection — асинхронные функции, которые
обрабатывают подключения к базе данных. Благодаря хукам, тесты не начнут
выполняться, пока не завершится настройка окружения, и не завершатся,
пока не выполнится очистка.
before и after с различными уровнями
тестовХуки могут быть использованы не только для выполнения глобальных операций, но и для настройки окружения на уровне каждого теста или набора тестов. В Playwright можно комбинировать хуки на различных уровнях — для всей тестовой сессии, группы тестов или для каждого теста отдельно. Такой подход позволяет гибко управлять подготовкой и очисткой ресурсов в зависимости от структуры тестов.
const { test, before, after, beforeEach, afterEach } = require('@playwright/test');
before(async () => {
await globalSetup();
});
after(async () => {
await globalTeardown();
});
test.beforeEach(async () => {
await setupTestData();
});
test.afterEach(async () => {
await clearTestData();
});
test('Тест 1', async ({ page }) => {
await page.goto('https://example.com');
// Тестовый код...
});
В этом примере хуки выполняются на разных уровнях: глобальные настройки перед тестами и очистка данных после каждого теста. Это позволяет максимально гибко управлять выполнением тестов и упрощает создание более сложных сценариев.
Хуки также могут быть полезны для обработки ошибок. Например, если
тест завершился с ошибкой, можно использовать хук afterEach
для логирования дополнительной информации, такой как скриншоты или логи
браузера. Это помогает понять причину ошибки и ускоряет процесс
диагностики.
const { test, afterEach } = require('@playwright/test');
test.afterEach(async ({ page }, testInfo) => {
if (testInfo.status === 'failed') {
await page.screenshot({ path: 'screenshot.png' });
console.log('Тест не прошел. Сделан скриншот');
}
});
test('Тест 1', async ({ page }) => {
await page.goto('https://example.com');
// Тестовый код...
});
В этом примере, если тест завершился с ошибкой, будет сделан скриншот страницы, что поможет в анализе проблемы.
Хуки before и after в Playwright
предоставляют мощный механизм для настройки и очистки тестового
окружения. Эти хуки позволяют автоматизировать задачи, которые должны
выполняться до или после тестов, обеспечивая гибкость и удобство при
написании и поддержке тестов. Правильное использование хуков позволяет
улучшить производительность тестов, сделать их более надежными и помочь
при диагностике ошибок.