Ответ
Интеграционное тестирование проверяет взаимодействие между несколькими компонентами, модулями или сервисами системы, чтобы убедиться, что они корректно работают вместе как единое целое.
Преимущества
- Высокая достоверность: Тесты имитируют реальные сценарии использования, проверяя систему на уровне, близком к конечному пользователю. Это повышает уверенность в работоспособности продукта.
- Обнаружение проблем взаимодействия: Эффективно выявляют ошибки, возникающие на стыке компонентов: несовместимость API, некорректная передача данных, проблемы с конфигурацией.
- Покрытие сложных бизнес-процессов: Позволяют тестировать сквозные сценарии, которые затрагивают несколько частей системы (например, API-шлюз, сервис аутентификации и базу данных).
Недостатки
- Медленное выполнение: Такие тесты требуют запуска нескольких сервисов, работы с сетью и базами данных, что делает их значительно медленнее unit-тестов.
- Сложность настройки и поддержки: Требуют подготовки сложного тестового окружения (поднятие баз данных, моки внешних сервисов, настройка сети), которое хрупко и трудно в обслуживании.
- Трудности с отладкой: Если тест падает, не всегда очевидно, какой именно компонент вызвал сбой, что усложняет поиск и исправление ошибки.
Пример (Pytest + FastAPI)
Этот тест проверяет, что при вызове эндпоинта создания пользователя (/users/
) запись действительно появляется в базе данных.
# conftest.py
@pytest.fixture
def test_db():
# Код для настройки временной тестовой БД
db = setup_test_database()
yield db
# Код для очистки БД после теста
teardown_test_database(db)
# test_api.py
def test_user_creation_integration(api_client, test_db):
# Шаг 1: Отправляем запрос на создание пользователя через API
response = api_client.post("/users/", json={"name": "Alice", "email": "alice@example.com"})
assert response.status_code == 201
user_id = response.json()["id"]
# Шаг 2: Проверяем, что пользователь действительно сохранился в БД
user_from_db = test_db.get_user_by_id(user_id)
assert user_from_db is not None
assert user_from_db.name == "Alice"