Какие виды тестов используются для микросервисов?
Что проверяют
Знаете ли вы, что в распределённой системе основная боль не внутри сервиса, а на стыках, и что закрывать её сквозными прогонами через весь ландшафт дорого и нестабильно. Ответ «юнит, интеграционные, e2e» одинаково звучит для монолита, поэтому ждут уровней между ними. Следом спрашивают, как тестировать сервис, когда соседние не готовы.
Как отвечать
- юнит: бизнес-логика в изоляции, зависимости подменены. Быстрые, их большинство;
- компонентные: сервис поднимается целиком со своей базой, внешние вызовы заменены стабами (
WireMock), проверка через его публичный API; - интеграционные: реальные база, брокер, кэш через Testcontainers. Ловят то, что моки прячут: миграции, транзакции, сериализацию сообщений;
- контрактные: контракты со стороны потребителя (Pact, Spring Cloud Contract). Потребитель фиксирует ожидания, поставщик проверяет их у себя в CI. Это и есть ответ про неготовых соседей. Для событий ту же роль играет реестр схем;
- сквозные: несколько ключевых пользовательских сценариев, не больше. Каждый лишний e2e это нестабильные падения и часы ожидания;
- нагрузочные: k6, Gatling, JMeter. Смотреть надо не среднее, а перцентили p95 и p99;
- на устойчивость: обрывы и задержки сети (toxiproxy), отказ соседнего сервиса, проверка таймаутов, повторов и предохранителя. Сюда же chaos-эксперименты;
- безопасность: проверка авторизации на каждом сервисе, сканирование зависимостей, динамический анализ.
Отдельно назовите специфику: идемпотентность обработчиков, потому что сообщение придёт повторно, согласованность в конечном счёте, из-за которой результат проверяют с ожиданием, а не сразу, и трассировки, без которых непонятно, где упал сценарий. Плюс проверки на проде: канареечный релиз, синтетические сценарии, метрики.
Где спотыкаются
Строят пирамиду вверх ногами: сотни сквозных тестов, которые падают через раз, и красной сборке никто не верит.
Пишут мок соседнего сервиса по документации, а не по контракту. Мок зелёный, прод сломан, потому что поставщик поменял поле полгода назад.
Проверяют только счастливый путь. В распределённой системе интереснее таймаут, дубль сообщения и ответ 500 от соседа.