Ответ
Между Unit-тестами (основание пирамиды) и End-to-End (E2E) тестами (вершина) находится средний слой — интеграционные тесты.
Этот слой проверяет взаимодействие между несколькими компонентами системы. Его можно разделить на несколько подтипов:
-
Сервисные тесты (Service/API Tests): Проверяют бизнес-логику приложения через его API, без пользовательского интерфейса. Они тестируют взаимодействие между сервисами или работу одного сервиса с его зависимостями (например, с базой данных).
-
Компонентные тесты (Component Tests): Фокусируются на тестировании отдельного компонента или модуля в изоляции от остальной системы, но с его реальными внутренними зависимостями.
Структура пирамиды:
- 🔼 E2E тесты (мало): Проверяют всю систему целиком через UI. Медленные и хрупкие.
- ↔️ Интеграционные/API тесты (больше): Проверяют взаимодействие компонентов. Быстрее, чем E2E.
- 🔽 Unit тесты (очень много): Проверяют изолированные функции/классы. Самые быстрые и стабильные.
# Unit-тест: проверяет одну функцию
def test_sum_function():
assert sum(2, 2) == 4
# Интеграционный (API) тест: проверяет эндпоинт
def test_create_user_api(api_client):
response = api_client.post("/users", json={"name": "test"})
assert response.status_code == 201
# Проверка, что пользователь действительно создан в БД
user = get_user_from_db(name="test")
assert user is not None
Такая структура позволяет достичь баланса между скоростью выполнения тестов и уверенностью в работоспособности системы.