Раздел 29 · Тестирование

Что такое E2E: пройти кассу глазами клиента

middle~45 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Что такое E2E: пройти кассу глазами клиента

Сцена · пройти весь путь клиента

Все предыдущие уроки мы разбирали кассу по частям: чистый домен проверяли примерами и property, границы подменяли слоями. Но клиент не знает про твой домен и твои слои. Он открывает браузер, вводит почту, жмёт кнопку, проводит платёж и смотрит на баланс. Всё, что между, для него один чёрный ящик.

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

Карта урока · что заберёшь

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

Раздел 1 · что такое E2E и чем он дорог

Идея словами

E2E (end to end, “из конца в конец”) проверяет приложение целиком: браузер, сеть, сервер, база. Ничего не подменяется. В этом его сила и его цена.

Сравни охват трёх уровней на одном действии “провести платёж”:

юнит         applyPayment(account, payment)         микросекунды, всё в памяти
интеграция   POST /payments -> реальный SQL          миллисекунды, БД настоящая
E2E          клик в браузере -> сервер -> БД -> UI    секунды, всё настоящее

Чем выше уровень, тем больше настоящего и тем больше уверенности, что “оно правда работает у клиента”. И тем дороже: E2E медленный (поднять браузер и сервер), хрупкий (зависит от вёрстки, таймингов, сети) и тяжёлый в поддержке. Поэтому на вершине пирамиды их мало.

Картинка · охват против цены

        ▲ уверенность "работает у клиента"
        │
   E2E  │  ███           мало, дорого, медленно
        │  ███
  интегр│  ██████        больше, дешевле
        │  ██████
   юнит │  ████████████  много, дёшево, быстро
        └──────────────────────────────────▶ количество

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

Шаг 1 · первый E2E Kassa

Критический сценарий кассы это деньги: вошёл, провёл платёж, баланс уменьшился. Пишем его на Playwright:

// e2e/specs/payment.spec.ts
import { DashboardPage } from '../pages/DashboardPage';
import { LoginPage } from '../pages/LoginPage';
import { expect, test } from '../fixtures';

test('логин, платёж, баланс уменьшается', async ({ page }) => {
  const login = new LoginPage(page);
  const dashboard = new DashboardPage(page);
  const email = `pay-${Date.now()}@batschool.dev`;

  await login.open();
  await login.login(email);

  await dashboard.expectBalance('1000.00');

  await dashboard.pay('100.00');

  await dashboard.expectBalance('900.00');
  await expect(page.getByTestId('history')).toContainText('списано 100.00');
});

Тест не знает ни про applyPayment, ни про слои, ни про SQL. Он делает ровно то, что делает человек, и проверяет ровно то, что человек видит. LoginPage и DashboardPage это Page Object, куда спрятаны селекторы, их разберём в уроке 18.

Когда код пишет агент

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

Что взять с собой

  • E2E проверяет всё приложение целиком, ничего не подменяя;
  • он самый честный и самый дорогой, поэтому его мало;
  • один E2E это путь клиента, а не отдельная ветка логики.

дальше после входа

Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.

Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.