Что такое E2E тестирование?
E2E (end-to-end) тестирование — проверка полного пользовательского сценария на собранной системе: тест открывает браузер, регистрируется, добавляет товар в корзину, оплачивает и убеждается, что заказ появился. Все компоненты при этом работают по-настоящему.
Ценность E2E в том, что он проверяет продукт так же, как им пользуется человек, и ловит проблемы, невидимые на других уровнях: неработающая кнопка, сломанный редирект, конфликт фронтенда с новой версией API.
Плата — скорость и хрупкость. E2E-тесты идут минутами, зависят от окружения и падают из-за мелких изменений вёрстки. Поэтому их держат немного: только ключевые сценарии, приносящие деньги, а остальное покрывают более быстрыми уровнями.
Где применяется
E2E-проверки пишут на самые ценные сценарии продукта: регистрация и вход, оформление и оплата заказа, отправка заявки с сайта, выгрузка документа. Именно они отвечают на вопрос, работает ли продукт с точки зрения пользователя, а не отдельных его частей.
Запускают их в конвейере CI на собранной системе, обычно на отдельном стенде с тестовыми данными. Из-за длительности прогон полного набора часто выносят на ночь или на этап перед релизом, оставляя в быстрой проверке лишь несколько ключевых маршрутов.
Пример
Тест открывает браузер, регистрируется с новым адресом почты, добавляет товар в корзину, проходит оплату тестовой картой и проверяет, что заказ виден в личном кабинете, а письмо-подтверждение попало в почтовый ящик.
Частые вопросы
Сколько E2E-тестов стоит писать?
Немного — обычно единицы или десятки на продукт. Они самые медленные и самые хрупкие в поддержке: любое изменение интерфейса может их сломать. Основную массу проверок закрывают модульными и интеграционными тестами, а E2E оставляют для критичных сквозных сценариев.
Почему E2E-тесты часто нестабильны?
Потому что в них участвует вся система: сеть, база, внешние сервисы, скорость отрисовки интерфейса. Типичные причины — ожидание фиксированного времени вместо ожидания события, зависимость от порядка запуска и общие тестовые данные, которые меняют другие тесты.
Чем E2E отличается от интеграционного тестирования?
Интеграционный тест проверяет связку нескольких компонентов, например сервис и базу. E2E проходит весь путь целиком со стороны пользователя, через интерфейс, и затрагивает все слои системы сразу. Он ближе к реальности, но дороже и медленнее.
Нужен ли для E2E отдельный стенд?
Да, желательно с собственной базой и предсказуемыми тестовыми данными. Запуск на общем окружении приводит к взаимным помехам: параллельные прогоны меняют одни и те же записи, и причину падения потом невозможно отличить от настоящего дефекта.