🎬 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-режиме, по расписанию на стенде с реалистичными данными. Метрики: время прогона, доля нестабильных тестов, покрытие бизнес-сценариев.