Ответ
Пирамида тестирования — это модель, которая визуализирует оптимальное соотношение тестов по уровням. Её структура основана на трёх ключевых характеристиках: количество, скорость и стоимость (время выполнения, стабильность, сложность поддержки).
Расположение уровней снизу вверх:
- Модульные тесты (Unit): Основа пирамиды. Их много, они быстрые, дешёвые, изолированные и проверяют корректность работы отдельных функций или классов.
- Интеграционные тесты: Проверяют взаимодействие между несколькими модулями или системами (например, с базой данных или внешним API).
- E2E-тесты: Вершина пирамиды. Их мало, они медленные, дорогие, хрупкие, но проверяют работу системы целиком с точки зрения пользователя.
Почему E2E-тесты наверху?
- Требуют полного развёрнутого окружения (базы данных, сервисы, UI).
- Зависят от многих компонентов, поэтому часто «ломаются» не из-за бага, а из-за изменений в интерфейсе или сетевых проблем.
- Выполняются долго (минуты или часы против миллисекунд у unit-тестов).
- Сложны в отладке — при падении такого теста неочевидно, в каком именно модуле ошибка.
Пример кода:
// Модульный тест (Jest) — быстрый и изолированный
test('calculateTotal adds prices correctly', () => {
expect(calculateTotal([10, 20, 30])).toBe(60);
});
Идея в том, чтобы максимизировать покрытие на нижних уровнях (где тесты эффективны), а на верхнем уровне оставить минимальный набор критических пользовательских сценариев.