Вопрос проверяет понимание архитектуры E2E-тестирования на Playwright: запуск, взаимодействие с бэкендом и воспроизводимость данных.
Playwright — это инструмент для автоматизации браузеров, который предоставляет собственный тест-раннер. Тесты описываются в файлах с расширением .spec.ts, а запуск происходит командой npx playwright test. Раннер управляет жизненным циклом браузера: создает контексты, страницы, выполняет тесты параллельно в нескольких воркерах. Каждый тест получает изолированную среду — отдельный браузерный контекст, что предотвращает влияние тестов друг на друга.
По умолчанию Playwright выполняет реальные запросы к серверу, как обычный пользователь. Это позволяет проверять полный стек, включая базу данных. Однако для надежности и скорости часто используют перехват сетевых запросов через page.route(). Это позволяет подменять ответы API, имитировать ошибки или задержки, не затрагивая реальный бэкенд. Такой подход особенно полезен для тестирования фронтенда в изоляции от нестабильных сервисов.
// Пример перехвата запроса и подмены ответа
await page.route('**/api/users', route => {
route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify([{ id: 1, name: 'Test' }])
});
});
await page.goto('/users');
await expect(page.locator('text=Test')).toBeVisible();Чтобы тесты были стабильными, необходимо контролировать начальное состояние. Для этого используют фикстуры Playwright, которые создают данные через API перед тестом и удаляют после. Также можно использовать глобальную настройку, которая очищает базу данных перед запуском. Важно избегать зависимости от случайных данных, например, текущего времени или внешних сервисов. Для этого применяют фиксированные значения или моки.
// Фикстура для создания пользователя
const test = base.extend({
user: async ({ request }, use) => {
const response = await request.post('/api/users', { data: { name: 'John' } });
const user = await response.json();
await use(user);
await request.delete(`/api/users/${user.id}`);
}
});
test('проверка профиля', async ({ page, user }) => {
await page.goto(`/profile/${user.id}`);
await expect(page.locator('h1')).toHaveText('John');
});Playwright предоставляет гибкие механизмы для E2E-тестирования: изоляцию контекстов, перехват запросов и фикстуры для управления данными. Используйте реальный бэкенд для критических сценариев, а моки — для ускорения и стабильности. Это позволяет создавать надежные тесты, которые легко поддерживать и запускать в CI/CD.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию