End-to-End-тестирование
easy

End-to-End-тестирование

Тестируем от начала до конца

Если приложение идеально работает в отдельных модулях, это ещё не значит, что и весь продукт будет вести себя так же. Ошибки могут возникнуть на стыке компонентов: данные с формы не доходят до сервера, авторизация сбоит при редиректе, а платежи обрабатываются некорректно.

Чтобы такого не случалось, проводят End-to-End (E2E) тестирование — проверку всего от начала до конца. Оно имитирует действия реального пользователя и помогает проверить, что вся система работает как задумано.

Сегодня разберём, в чём суть такого тестирования, как его проводить, какие инструменты использовать и в чём его отличия от других тестов.

Что такое End-to-End-тестирование

End-to-End, или сквозное, тестирование — это метод проверки работы системы от начала до конца, который покрывает все её компоненты и взаимодействия. Цель такого тестирования — убедиться, что всё работает как единое целое, а пользователь без проблем может пройти по ключевым сценариям: зарегистрироваться, оформить заказ, оплатить покупку, загрузить файлы и так далее.

Допустим, у нас есть интернет-магазин — тогда мы можем протестировать каждую часть по отдельности.

  • Форма регистрации работает: пользователь может создать аккаунт.
  • Корзина сохраняет товары: добавленные позиции не исчезают.
  • Оплата проходит успешно: платёжный сервис принимает транзакции.

Но это всё не значит, что пользователь сможет пройти весь путь без сбоев. Может произойти так, что данные с формы регистрации не дойдут до базы, и войти в систему не получится. Или корзина работает, но при оформлении заказа система не увидит товаров.

Чтобы такого не было, после тестирования модулей проводят E2E-тестирование. Оно эмулирует реальные действия пользователя: открывает сайт, регистрируется, добавляет товары, оформляет заказ и проверяет, дошли ли данные до всех нужных частей системы.

Зачем нужно End-to-End-тестирование

Есть такое понятие — пирамида тестирования. Она показывает, на каких уровнях проверяется продукт и как распределяются тесты. Большинство тестов находится у основания пирамиды — чем выше уровень, тем их меньше. Это связано с тем, что по мере продвижения вверх тесты становятся медленнее, дороже в написании, запуске и поддержке.

  • Основание пирамиды — юнит-тесты (модульные). Они быстрые и проверяют работу отдельных функций или компонентов.
  • Средний уровень — интеграционные тесты. Они проверяют, как взаимодействуют модули внутри системы.
  • Вершина пирамиды — End-to-End-тестирование. Таких тестов меньше всего, но они самые ресурсоёмкие — проверяют работу всей системы целиком.

End-to-End-тестирование
Пассрейт показывает, какой процент тестов доходит без ошибок до конца

Преимущества End-to-End-тестирования

Главное преимущество E2E-тестирования — его максимальная приближённость к реальным условиям. Тесты эмулируют поведение пользователя: открывают страницу, вводят данные, переключаются между разделами, отправляют запросы. 

Допустим, форма регистрации работает, но новый пользователь не попадает в базу данных, или заказ оформляется, но информация о нём не передаётся в систему складского учёта. На уровне модулей всё работает, а ошибки в приложении всё равно есть, и это можно узнать только при сквозном тестировании.

Недостатки End-to-End-тестирования

E2E-тестирование занимает больше времени по сравнению с юнит- или интеграционными тестами — оно требует выполнения полного сценария, включая взаимодействие с базой данных, сервером и внешними сервисами.

Настройка тестовой среды и поддержка E2E-тестов — это сложный процесс. Нужно учитывать зависимости, тестовые данные, возможные изменения в интерфейсе или логике приложения. Если что-то меняется, тесты могут ломаться, и их приходится регулярно обновлять.

Кроме того, End-to-End-тестирование не заменяет другие виды тестов. Оно помогает проверить работу всей системы, но не всегда эффективно при поиске конкретных багов. Допустим, если тест показывает, что оформление заказа не работает, придётся дополнительно проверять, где именно произошёл сбой — в логике интерфейса, API или базе данных. Поэтому в реальной практике E2E-тесты используются вместе с юнит- и интеграционными тестами, а не сами по себе.

Типы End-to-End-тестирования

В зависимости от целей разработки различают два подхода к E2E-тестированию: горизонтальное и вертикальное. Каждый из них решает свои задачи и применяется в разных сценариях.

Горизонтальное End-to-End-тестирование проверяет, как приложение работает в разных средах, на разных устройствах и платформах, а также как взаимодействует с внешними системами. Его цель — убедиться, что все элементы продукта корректно работают вместе, обеспечивая бесшовный пользовательский опыт. 

При горизонтальном тестировании проверяют:

  • Совместимость на разных платформах — приложение стабильно работает на разных операционных системах, в браузерах и на мобильных устройствах.
  • Реальные пользовательские сценарии. Тестирование проходит с точки зрения конечного пользователя — мы проверяем, можно ли без проблем перемещаться по всем разделам приложения.
  • Интеграции. Проверяются точки взаимодействия между модулями, базами данных, API и внешними сервисами.
  • Полный пользовательский поток. Например, в интернет-магазине тест может покрывать весь процесс — от выбора товара до получения подтверждения об оплате.
  • Удобство и совместимость. Тесты оценивают юзабилити — насколько комфортно пользоваться приложением в разных условиях.

Вертикальное E2E-тестирование проверяет приложение послойно — от пользовательского интерфейса до базы данных. Оно помогает убедиться, что каждый уровень системы (фронтенд, бэкенд, API, база данных) работает корректно и взаимодействует без сбоев.

Сквозное тестирование также может быть ручным и автоматизированным.

При ручном тестировщик сам проходит через весь процесс, проверяя, как работает система. Если где-то что-то идёт не так — фиксирует баг. Автоматизированное тестирование делают с помощью кода. Скрипты повторяют действия пользователя: открывают браузер, кликают по кнопкам, вводят данные, проверяют результат.

Процесс End-to-End-тестирования

Чтобы E2E-тестирование было эффективным, оно проходит несколько этапов.

Планирование. Определяем, что именно будем тестировать. Составляем список ключевых пользовательских сценариев. Например, если тестируем интернет-банк, важно проверить перевод денег, авторизацию, отправку уведомлений.

Подготовка данных. Создаём тестовые аккаунты, баланс на счетах, списки товаров — всё, что нужно для реалистичных проверок. Это позволяет имитировать реальные условия, чтобы тесты были максимально приближены к настоящей работе приложения.

Настройка тестовой среды. Разворачиваем сервер, базу данных, настраиваем интеграции. Важно, чтобы тестовая среда была стабильной, иначе ошибки могут появляться не из-за багов, а из-за внешних факторов, например обновления API.

Запуск тестов. Тесты могут выполняться вручную или автоматически. Автотесты эмулируют реальные действия пользователя: открывают браузер, вводят данные, нажимают кнопки и проверяют, всё ли работает как нужно.

Анализ результатов. Смотрим, что сработало, а где тесты провалились. Ошибки фиксируем в баг-трекере, но важно не просто увидеть красный тест, а понять причину: проблема в коде или в тестовой среде?

Исправление багов и повторное тестирование. Исправляем ошибки, перезапускаем тесты и убеждаемся, что теперь всё работает, а новые исправления ничего не сломали. 

Создание тест-кейсов для End-to-End-тестирования

Тест-кейс — это чёткий сценарий, по которому проверяют работу системы. В E2E-тестировании важна не просто проверка отдельных функций, а логика всего процесса. Такие тесты покрывают весь пользовательский путь, поэтому сценарии должны быть подробно прописаны и понятны как для ручного тестирования, так и для автоматизации.

Хороший тест-кейс должен максимально точно имитировать реальные действия пользователя и обычно включает три основных элемента:

  • Входные данные — что потребуется для теста (например, email и пароль зарегистрированного пользователя).
  • Шаги выполнения — последовательность действий, которые тест должен пройти (например, авторизация → выбор товара → оформление заказа → подтверждение).
  • Ожидаемый результат — что должно произойти, если всё работает правильно (например, «Заказ оформлен, пользователь получил подтверждение на email»).

End-to-End-тестирование

Метрики End-to-End-тестирования

Чтобы тестирование было полезным, важно не просто запускать тесты, но и понимать, как они проходят. Для этого используют метрики, которые помогают отслеживать прогресс, находить слабые места и оценивать стабильность системы.

Первая ключевая метрика — готовность тест-кейсов. Она показывает, сколько сценариев уже подготовлено, а сколько ещё в процессе. Это особенно важно, когда тестирование масштабное и нужно видеть, насколько всё идёт по плану.

Другая метрика — прогресс тестирования. Она отражает, сколько тестов запустили за неделю, какие из них прошли успешно, а какие провалились. Это помогает понять, где больше всего проблем и стоит ли пересмотреть подход к тестам.

Кроме того, следят за статусом дефектов — сколько багов уже исправлено, а какие ещё открыты. Можно даже отслеживать, какие ошибки критичные, а какие могут подождать.

Ну и последний момент — доступность тестовой среды. Если система часто падает или уходит в обновления, тестирование затягивается. Поэтому важно понимать, сколько времени в день среда реально была доступна.

Инструменты для End-to-End-тестирования

Выбор инструмента зависит от проекта и вида тестирования — ручное или автоматизированное. Посмотрим самые распространённые варианты.

Популярные инструменты и фреймворки

testRigor

Если нужно автоматизировать тестирование, но без программирования, подойдёт testRigor. Он позволяет создавать тесты на естественном языке. Например, если мы тестируем поиск на Яндекс Маркете, сценарий можно записать так:

enter "смартфон" into "Поиск"
press enter
click "Apple iPhone 15"
click "Добавить в корзину"

Такой тест имитирует действия обычного пользователя: вводит текст в поисковую строку, нажимает Enter, чтобы запустить поиск, выбирает нужный товар, добавляет его в корзину.

Инструмент подходит для тестирования веб-сервисов, интернет-магазинов, мобильных приложений, где важно проверять основные пользовательские сценарии без сложных технических настроек.

Cypress

Один из самых популярных инструментов для автоматизации тестирования фронтенда. Удобен для тестирования SPA (Single Page Applications). Запускает приложение прямо в браузере, создавая условия, максимально близкие к реальной работе сайта. Чем точнее тесты имитируют действия пользователя, тем выше вероятность выявить баги, с которыми могут столкнуться настоящие пользователи.

End-to-End-тестирование
Cypress Test Runner выполняет E2E-тестирование API для управления задачами, проверяя добавление, получение и удаление элементов через HTTP-запросы

Cypress устанавливается через npm и хорошо интегрируется в CI/CD-процессы — можно запускать тесты автоматически при каждом обновлении кода. Кроме этого, поддерживает запись видео тестов. Если тест упал, можно просмотреть запись и понять, что пошло не так, без необходимости повторного запуска.

Playwright

Поддерживает все популярные браузеры, позволяет тестировать веб-приложения в облаке и в CI/CD, а также эмулировать мобильные версии сайтов в Chrome для Android и Mobile Safari. Поддерживает несколько языков программирования (JavaScript, TypeScript, Python, .NET, Java).

End-to-End-тестирование
Запуск и настройка Playwright

Selenium

Selenium сложнее в настройке, чем другие инструменты, но при этом поддерживает больше языков, браузеров и платформ. Тесты можно писать на Java, Python, C# и других языках, запускать их на реальных устройствах, в облаке и в распределённых средах.

В отличие от Cypress и Playwright, Selenium использует WebDriver — отдельный компонент, который управляет браузером. Это усложняет настройку, потому что для каждого браузера нужен свой WebDriver, и его версии должны совпадать с версией браузера. Также тесты в Selenium не ждут загрузки элементов автоматически. Команды выполняются строго по порядку, и если страница загружается с задержкой, тест может упасть, потому что элемент ещё не появился. Поэтому требуются дополнительные ручные настройки. 

Лучшие практики End-to-End-тестирования

End-to-End-тесты проверяют, как система работает целиком, но если выстроить их неправильно, тестирование может стать медленным, хрупким и сложным в поддержке. Поэтому важно учитывать вот что:

  • Не пытаться покрыть тестами вообще всё. E2E-тестирование — это не про проверку каждой кнопки, а про ключевые сценарии: регистрация, оформление заказа, работа с платежами, критические пользовательские пути. Всё остальное лучше покрывать юнит- и интеграционными тестами, чтобы не перегружать тестовую систему. Google рекомендует использовать в проекте правило 70/20/10 — 70% юнит-тестов, 20% интеграционных, 10% E2E. Это помогает сохранять баланс между скоростью тестирования и надёжностью продукта.
  • Тесты должны быть стабильными. Если тест падает раз через раз, он бесполезен. Часто проблема не в коде, а в среде: нестабильные API, меняющиеся тестовые данные, неожиданные задержки. Чтобы избежать этого, лучше использовать заранее подготовленные тестовые данные и по возможности эмулировать внешние сервисы (моки, заглушки).
  • Автономность тестов. Бывает, что один сбой тянет за собой кучу других, и в итоге половина тестов красная, хотя реальная проблема всего одна. Если тесты работают независимо, проще понять, что именно сломалось, и не тратить время на поиск ошибки там, где её нет. 
  • Интеграция тестов с CI/CD. E2E-тесты не всегда стоит запускать на каждый коммит, так как они медленные. В некоторых проектах их лучше запускать периодически (ночью, раз в неделю) или перед важными релизами. Это снижает нагрузку на пайплайн и не замедляет разработку.
  • Не отказываться от ручного тестирования. Автоматизация — это хорошо, но полагаться только на неё не стоит. Удобство интерфейса, скорость работы или визуальные баги автотесты не проверят. 
  • Поддержка тестов. Если их не пересматривать, через пару месяцев половина из них может устареть и начать ломаться просто потому, что продукт изменился. Поэтому полезно время от времени проверять, какие тесты реально нужны, а какие можно убрать или переписать.

Сравнение End-to-End-тестирования с другими методами

Мы уже писали подробно, какие бывают виды тестирования, а сейчас разберём, в чём отличие E2E от других видов тестирования.

End-to-End-тестирование vs функциональное тестирование

Функциональное тестирование отвечает за проверку работы отдельных функций системы. Оно сфокусировано на конкретных фичах: можно ли создать аккаунт, отправить форму, правильно ли обрабатываются введённые данные. Такие тесты чаще выполняются в изолированной среде, без проверки всех системных связей.

End-to-End охватывает все уровни системы — интерфейс, сервер, базу данных и интеграции с внешними сервисами. Если функциональное тестирование проверит, что кнопка «Оформить заказ» работает и отправляет данные, то E2E-тестирование проверит весь процесс: товар списался со склада, покупатель получил письмо с подтверждением, а заказ отобразился в CRM.

End-to-End-тестирование vs системное тестирование

Системное тестирование проверяет, соответствует ли вся система требованиям, но не всегда охватывает полный пользовательский путь. Оно может включать проверку функциональности, производительности, безопасности, но чаще проводится в контролируемой среде.

E2E-тестирование проверяет не только систему, но и её интеграции с внешними сервисами. Например, в таких тестах могут использоваться реальные API платёжных систем, почтовых сервисов или других внешних инструментов, которые сложно эмулировать при системном тестировании.

Системное тестирование проверяет, что на сайте можно создать профиль и он сохраняется в базе данных, а E2E проверит весь процесс: профиль создаётся, пользователь может войти, изменить настройки, а изменения корректно передаются в другие сервисы.

Вызовы и трудности End-to-End-тестирования

Одна из главных проблем — долгое выполнение тестов. В отличие от юнит-тестов, которые проверяют небольшие участки кода и завершаются за секунды, E2E-тесты проходят весь процесс от начала до конца. Если тест проверяет оформление заказа, он должен дождаться загрузки страницы, ввести данные, дождаться ответа сервера, проверить статус в базе. 

Кроме того, E2E могут сломаться из-за медленного ответа API, изменения структуры базы или небольшого редизайна интерфейса. Бывает, что тест падает, хотя сам продукт работает корректно — просто на сервере временные задержки, а тест настроен на жёсткие тайминги. В итоге команда тратит время на разбор ложных срабатываний.

Другой сложный момент — настройка среды. В E2E-тестировании важно, чтобы тестовая среда максимально походила на боевую: с работающим сервером, базой данных, внешними API. Но иногда тестовая инфраструктура нестабильна: база очищается, сторонние сервисы недоступны, данные устаревают. Это может привести к ситуации, когда тесты просто невозможно запустить.

Сюда же — поддержка тестов. Это отдельная работа, особенно если продукт активно развивается. Стоит немного поменять бизнес-логику или дизайн страницы — и часть тестов начинает падать. Если тестов слишком много, их поддержка становится сложной.

Не всегда E2E-тестирование можно полностью автоматизировать. Некоторые проверки требуют ручного тестирования, особенно если в процессе задействованы сложные внешние интерфейсы. Допустим, валидация SMS-кодов, тестирование взаимодействия с реальными платёжными системами или работа с загрузкой файлов могут быть сложны для автоматизации.

Обложка:

Алексей Сухов

Корректор:

Елена Грицун

Вёрстка:

Кирилл Климентьев

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy