Что такое E2E-тест и приведите его пример.

Ответ

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

Пример E2E-теста для процесса оформления заказа с использованием Playwright:

import { test, expect } from '@playwright/test';

test('Полный цикл покупки товара', async ({ page }) => {
  // 1. Открытие сайта и выбор товара
  await page.goto('https://demo-shop.example.com');
  await page.click('data-testid=product-card-1');
  await page.click('text=В корзину');

  // 2. Переход в корзину и оформление
  await page.click('#cart-icon');
  await expect(page.locator('.cart-item')).toHaveCount(1);
  await page.click('text=Оформить заказ');

  // 3. Заполнение формы
  await page.fill('#email', 'customer@example.com');
  await page.fill('#address', 'ул. Примерная, 123');
  await page.click('#confirm-payment');

  // 4. Проверка успешного завершения
  await expect(page.locator('h1')).toHaveText('Заказ подтверждён!');
  await expect(page).toHaveURL(/order-success/);
});

Характеристики E2E-тестов:

  • Цель: Проверка интеграции всех компонентов (фронтенд, бэкенд, БД, сторонние сервисы).
  • Уровень: Высокий, ближе к пользовательскому сценарию.
  • Выполнение: Часто запускаются в CI/CD пайплайне после модульных и интеграционных тестов.
  • Инструменты: Cypress, Playwright, Selenium, TestCafe.

Ответ 18+ 🔞

Ну вот, смотри, опять эти ваши буквы: E2E. А расшифровывается-то как? End-to-end. То есть, от начала и до самого пиздеца, прости господи. Это когда ты проверяешь всю свою конструкцию не по кусочкам, а целиком, как будто самый обычный юзер, которому похуй на твои архитектуры и микросервисы, пришёл и тыкает в кнопки.

Представь, ты купил тачку. Модульные тесты — это когда механик каждый цилиндр по отдельности слушает. Интеграционные — когда он двигатель в сборе проверяет. А E2E — это когда ты, мудак, садишься за руль, заводишь её и пытаешься доехать из точки А в точку Б, по пути заправившись, включив кондей и наехав на бордюр. Если доехал — тест прошёл. Если встал посреди дороги с горящими check engine — всё, пизда, тест упал.

Вот смотри, как это выглядит в коде, на примере покупки какого-нибудь дерьма в интернет-лавке. Берём Playwright, потому что он сейчас в теме.

import { test, expect } from '@playwright/test';

test('Полный цикл покупки товара', async ({ page }) => {
  // 1. Открытие сайта и выбор товара
  await page.goto('https://demo-shop.example.com');
  await page.click('data-testid=product-card-1');
  await page.click('text=В корзину');

  // 2. Переход в корзину и оформление
  await page.click('#cart-icon');
  await expect(page.locator('.cart-item')).toHaveCount(1);
  await page.click('text=Оформить заказ');

  // 3. Заполнение формы
  await page.fill('#email', 'customer@example.com');
  await page.fill('#address', 'ул. Примерная, 123');
  await page.click('#confirm-payment');

  // 4. Проверка успешного завершения
  await expect(page.locator('h1')).toHaveText('Заказ подтверждён!');
  await expect(page).toHaveURL(/order-success/);
});

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

Итак, что это за зверь такой, E2E-тест:

  • Цель его, блядь, проста: Убедиться, что все части твоего Лего — фронтенд, бэкенд, база данных, платёжная система, которая всегда лежит в пятницу вечером — работают вместе, а не живут отдельной жизнью. Интеграция, ёпта!
  • Уровень абстракции: Высокий, небоскрёбный. Не лезем в кишки, а смотрим на поведение системы с высоты птичьего полёта. Как пользователь, у которого терпения — ноль ебать.
  • Когда их гоняют: Обычно в самом конце, после всех остальных проверок. Собрали билд, развернули на тестовом стенде — и поехали, полный сценарий. В CI/CD пайплайне они часто самые медленные и самые важные одновременно. Если упали — всё, хуй вам, а не релиз.
  • Чем это делают: Инструментов — овердохуища. Cypress, Playwright (как в примере), старичок Selenium, TestCafe. Каждый со своим характером и граблями.

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