Ответ
Системное тестирование — это проверка интегрированной системы в целом на соответствие функциональным и нефункциональным требованиям. Оно выполняется в среде, максимально приближенной к боевой, но может использовать заглушки (mocks/stubs) для внешних зависимостей.
End-to-End (E2E) тестирование — это подвид системного тестирования, который проверяет полный рабочий поток приложения от начала до конца, включая все реальные внешние интеграции (базы данных, API-сервисы, платежные шлюзы). E2E имитирует поведение реального пользователя.
Ключевые отличия:
| Критерий | Системное тестирование | E2E-тестирование |
|---|---|---|
| Объем | Вся система как единое целое. | Сквозной пользовательский сценарий через все слои и системы. |
| Зависимости | Может использовать заглушки для внешних сервисов. | Всегда использует реальные внешние сервисы и интеграции. |
| Цель | Проверить, что система соответствует спецификациям. | Проверить, что бизнес-процесс работает корректно для конечного пользователя. |
| Пример | Проверка API-метода создания заказа (с моком платежного шлюза). | Полный сценарий: пользователь выбирает товар, оформляет заказ, проходит оплату, получает уведомление. |
Пример E2E-теста (Playwright):
import { test, expect } from '@playwright/test';
test('complete user purchase flow', async ({ page }) => {
await page.goto('https://shop.example.com');
await page.click('text="Add to Cart"');
await page.click('data-testid=cart-icon');
await page.click('text="Checkout"');
await page.fill('#card-number', '4242424242424242');
await page.click('text="Pay"');
await expect(page.locator('text="Order Confirmed"')).toBeVisible();
});