Ответ
Системное тестирование — это проверка интегрированной системы в целом на соответствие функциональным и нефункциональным требованиям. Оно выполняется в среде, максимально приближенной к боевой, но может использовать заглушки (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();
}); Ответ 18+ 🔞
Да ты посмотри, какая хуйня развелась в тестировании! Сидят, блядь, термины плодят, как кролики. Ну ладно, разбираться надо, а то потом на проекте такой пиздец начнётся, что мама не горюй.
Вот, например, системное тестирование. Это когда ты, сука, взял всю свою сборку, эту гору кода, которая уже вроде как склеена, и начинаешь её пинать, как тупую скотину. Проверяешь, работает ли она вообще как единый организм, а не как набор отдельных, блядь, запчастей. Требования вот эти, на бумажке — выполняются? Да? Ну и славно. Можно и заглушки воткнуть, если какой-нибудь внешний сервис — пидарас шерстяной — лежит. Главное — система в себе.
А теперь, внимание, ёпта, End-to-End (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();
});
Видишь? Полный путь, от открытия сайта до подтверждения заказа. Если где-то сбой — значит, вся цепочка, блядь, не работает. Вот и вся философия. E2E — это проверка не на "работает ли код", а на "сможет ли живой человек этим воспользоваться, не разнеся вдребезги свой монитор".