🎬 End-to-End тестирование
Сквозные сценарии: что проверять, как писать устойчивые тесты и бороться с хрупкостью.
Теория · Тестирование · #testing #e2e #ui
Идея
E2E-тест проходит путь пользователя через всю систему: интерфейс → сервер → БД → внешние сервисы. Проверяет, что компоненты работают вместе так, как видит человек.
Что выбирать для E2E
Только важные сквозные сценарии: регистрация и вход, поиск и покупка, платёж, критичные бизнес-цепочки. Не пытайтесь покрыть всё: E2E медленные и хрупкие.
Место в пирамиде
Много юнит-тестов → меньше интеграционных → мало E2E.
Хороший E2E-тест
| Принцип | Как |
|---|---|
| Независимость | создаёт нужные данные через API, не зависит от других тестов |
| Устойчивые селекторы | data-testid, роли (getByRole), а не классы и XPath-цепочки |
| Ожидания по условию | ждать элемент или ответ, а не sleep(5) |
| Чистое окружение | отдельный стенд и данные, сброс между прогонами |
| Короткий сценарий | один тест одна цель |
| Диагностика | скриншот, видео, трассировка при падении |
Page Object
Класс описывает страницу: селекторы и действия. Тесты читаются как сценарий, правка интерфейса меняет код в одном месте.
class LoginPage {
constructor(page) { this.page = page; }
async login(email, pw) {
await this.page.getByLabel('Email').fill(email);
await this.page.getByLabel('Пароль').fill(pw);
await this.page.getByRole('button', { name: 'Войти' }).click();
}
}
Причины нестабильных тестов (flaky)
Асинхронность и гонки, общие данные, нестабильный стенд, зависимость от времени, анимации, сторонние сервисы. Лечение: явные ожидания, изоляция данных, моки внешних сервисов, перезапуск как временная мера.
Инструменты
| Инструмент | Особенности |
|---|---|
| Playwright | Chromium, Firefox, WebKit, автоожидание, трассировка |
| Cypress | JS, удобный отладчик, один браузерный контекст |
| Selenium | много языков и браузеров, зрелая экосистема |
| WebdriverIO, TestCafe | альтернативы |
| Appium | мобильные приложения |
Запуск
В CI параллельно, в headless-режиме, по расписанию на стенде с реалистичными данными. Метрики: время прогона, доля нестабильных тестов, покрытие бизнес-сценариев.