← Назад к вопросам

В чём разница между E2E и системным тестированием?

1.0 Junior🔥 161 комментариев
#Инструменты тестирования#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между End-to-End (E2E) и Системным тестированием

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

Ключевое концептуальное отличие: Уровень и границы тестирования

Основное различие лежит в уровне абстракции и границах тестируемой системы.

  • Системное тестирование (System Testing) проверяет законченную, интегрированную систему на соответствие требованиям (SRS). Оно выполняется в изолированной среде, максимально приближенной к реальной (production-like). Здесь тестируется система как единое целое, но часто в рамках её границ. Внешние зависимости (например, платёжные шлюзы, сторонние API, почтовые серверы) могут быть замоканы (mocked) или использованы в тестовом режиме. Цель — удостовериться, что вся внутренняя логика и интеграция между модулями работают корректно.

  • End-to-End тестирование (E2E Testing) — это подвид системного тестирования, который проверяет полный рабочий поток (flow) приложения от начала до конца в условиях, максимально приближенных к реальным. E2E-тест проходит через все слои приложения (интерфейс, бизнес-логика, база данных) и взаимодействует с внешними системами (real dependencies). Его цель — убедиться, что вся цепочка действий пользователя, часто в сложном сценарии с несколькими системами, выполняется корректно.

Простая аналогия: Представьте, что вы тестируете автомобиль.

  • Системное тестирование — это проверка всего собранного автомобиля в мастерской: двигатель заводится, фары горят, кондиционер работает, все кнопки на панели функциональны.
  • E2E-тестирование — это поездка на этом автомобиле из точки А в точку Б по реальной дороге, с заправкой на реальной АЗС, оплатой парковки через мобильное приложение и навигацией через онлайн-карты.

Сравнительная таблица

КритерийСистемное тестированиеEnd-to-End тестирование
Основная цельВерификация соответствия системы заявленным функциональным и нефункциональным требованиям.Верификация полного пользовательского сценария в реальной (или близкой к ней) среде.
ГраницыВ рамках тестируемой системы. Внешние зависимости часто изолируются.Включает тестируемую систему и её интеграцию с реальными внешними сервисами.
ФокусCorrectness (корректность работы) и соответствие спецификациям.User journey (путь пользователя), рабочий процесс и интеграция с внешним миром.
Сложность и времяВысокая сложность, но время выполнения может быть оптимизировано за счёт изоляции.Очень высокая сложность и длительное время выполнения. Часто нестабильно.
Ответ на вопрос"Система работает так, как мы спроектировали?""Пользователь может выполнить свою задачу от начала до конца в реальных условиях?"
Пример сценария"Пользователь создаёт заказ в интернет-магазине, и заказ сохраняется в БД со статусом 'Новый'.""Пользователь ищет товар на сайте, добавляет его в корзину, оформляет заказ с реальной платёжной картой (test mode), получает email-подтверждение, а администратор видит этот заказ в CRM-системе."

Практический пример (Онлайн-Банкинг)

Рассмотрим сценарий "Оформление денежного перевода".

# Это может быть сценарий как системного, так и E2E-теста.
# Разница — в реализации и настройках окружения.

Feature: Денежный перевод
  Scenario: Успешный перевод между своими счетами
    Given Пользователь авторизован в системе
    And На текущем счету достаточно средств
    When Пользователь заполняет форму перевода на другой свой счет
    And Подтверждает операцию
    Then Деньги списываются с исходного счета
    And Деньги зачисляются на целевой счет
    And На экране отображается успешное уведомление
  • Реализация как Системного теста:
    *   База данных — это изолированная тестовая БД, заполненная фикстурами.
    *   Шаг "Пользователь авторизован" выполняется через прямой вызов API или инжекцию сессии.
    *   Проверки списания/зачисления (`Then`) делаются прямыми запросами к тестовой БД.
    *   **Внешняя система нотификаций (SMS/Email) — замокана.** Мы лишь проверяем, что система отправила правильное событие в шину или вызвала нужный метод сервиса.

  • Реализация как E2E-теста:
    *   Тест запускается в среде, максимально похожей на прод (staging/pre-prod).
    *   Пользователь авторизуется **через реальный UI** (например, с помощью Selenium/Cypress).
    *   Заполняет форму перевода в интерфейсе.
    *   После подтверждения проверяется, что баланс изменился **через UI или публичный API** (а не прямым доступом к БД).
    *   **Критически важный шаг E2E:** Проверяется, что **реальное тестовое SMS или email** пришло на указанный номер/ящик. Это может включать опрос тестового почтового сервера или использование специальных тестовых номеров телефонов.

Выводы и рекомендации

  1. Вложенность: E2E-тестирование является частным случаем или подмножеством системного тестирования, сфокусированным на сквозных сценариях.
  2. Пирамида тестирования: E2E-тесты находятся на самом верху пирамиды. Они самые дорогие в поддержке, медленные и хрупкие, поэтому их должно быть ограниченное количество. Они покрывают ключевые бизнес-сценарии.
  3. Системные тесты могут быть более широкими и включать, помимо сквозных функциональных проверок, нагрузочное (performance), стрессовое, регрессионное и приёмочное (acceptance) тестирование.
  4. Стратегия: В современной практике E2E-тесты автоматизируются для проверки критических путей (happy path), в то время как системное тестирование остается комплексной фазой, включающей как автоматизированные, так и исследовательские (exploratory) ручные проверки.

Таким образом, E2E — это фокус на пользовательском сценарии сквозь все системы, а системное тестирование — это всесторонняя проверка одной собранной системы.