Ответ
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-тесты — это последний рубеж обороны перед тем, как твой косяк увидят живые люди. Если они проходят, можно выдохнуть и надеяться, что в продовой базе данных кто-то не накосячил с миграцией. Но это уже совсем другая история, блядь.