Какие виды тестов используются для микросервисов?
Что проверяют
Понимаете ли вы, что в распределённой системе основные риски лежат не внутри сервиса, а на его границах. По набору уровней сразу видно, писали ли вы тесты сами или видели чужие. Следом обычно спрашивают, как тестировать сервис с пятью зависимостями, не поднимая всю систему целиком.
Как отвечать
Идите снизу вверх по пирамиде и называйте инструменты:
- юнит:
pytest, зависимости подменены, миллисекунды на тест, основная масса покрытия бизнес-логики; - интеграционные: сервис с настоящей инфраструктурой в Docker через
testcontainers(Postgres, Kafka, Redis), для FastAPI удобенhttpx.AsyncClientсASGITransport, без сети и без поднятого сервера; - контрактные: Pact или генерация запросов по схеме OpenAPI через Schemathesis. Смысл в том, чтобы поймать расхождение потребителя и поставщика без общего стенда;
- компонентные: сервис целиком, чужие HTTP-вызовы заглушены через
respxили WireMock; - сквозные (e2e): несколько критических сценариев на стенде, дорогие и хрупкие, поэтому их держат единицами;
- нагрузочные: Locust или k6, смотрят p95 и p99, деградацию под нагрузкой, поведение при ретраях;
- на устойчивость: таймаут соседа, ответ 500, повторная доставка сообщения. Так проверяется идемпотентность обработчика и работа circuit breaker.
Отдельно скажите про асинхронную часть: потребителя очереди тестируют так, что тест публикует сообщение в поднятый брокер и проверяет эффект в базе, а не мокает клиент Kafka.
Хорошо закончить тем, что и когда гоняется: юнит и интеграционные на каждый пул-реквест, нагрузочные и e2e по расписанию.
Где спотыкаются
Строят проверку на e2e, потому что «так надёжнее». Прогон занимает полчаса, тесты мигают, и через месяц их отключают всей командой.
Мокают так глубоко, что тест проверяет собственный мок. Ответ соседнего сервиса изменился, схема разошлась, а сборка зелёная. Это ровно та дыра, ради которой существуют контрактные тесты.
Проверяют только успешный путь. Таймаут, дубль сообщения и частичный отказ в микросервисах случаются каждый день, и самые дорогие баги живут именно там.