Чтобы убедиться, что все микросервисы хорошо работают вместе, их необходимо протестировать. Работа с разными версиями микросервисов или разрешение конфликтов контрактов может быть проблематичным в больших командах. Поэтому, когда ваши микросервисы действительно содержат формальную спецификацию API, лучше превратить ее в контракт. Контракт гарантирует, что каждая служба работает изолированно, но отправляет правильные запросы своему партнеру.
Давайте рассмотрим взаимодействия сервиса, который мы для простоты назовем Provider (обладающий API).
Когда мы выкатываем новую версию Provider-а мы должны быть уверены, что не поломали совместимость со всеми Consumer-aми:

Требования Consumer-a:
Требования Provider-а:
Реализовать требования можно несколькими способами, давайте коротко рассмотрим каждый.
Интеграционные UNIT-тесты проверяют, правильно ли код Consumer-a генерирует запрос и обрабатывает ожидаемый ответ, по шагам это выглядит так:
Коротко: надежно, но тесты выполняются долго + но нужна инфраструктура, а это ресурсы, которых всегда не хватает.
Развернуто: все понимают, что когда сервис Consumer используя E2E тестирование мы получаем больше гарантии, но если сервис А зависит от сервиса B, то E2E тестирование потребует наличия уже двух реально работающих зависимостей (A и B), это называется интеграционным тестированием (мы этого не хотим, потому что мы хотим катить микросервисы обособленно). Когда в организации тысячи микросервисов и сотни команд, работающих с ними, при попытке использовать подход возникают проблемы:
Сверяются yaml/json схемы, это не требует инфраструктуры и тесты получаются очень быстрыми.
Вывод: способ обязателен к реализации, т.к. почти не потребляет ресурсов.
Чтобы реализовать данный способ нам нужен сервис Mock (при тестировании контрактов использующих message queue называемый Mock-брокером).
Mock - сервис является источником знаний о всех контрактах (знает кто и кому обязуется соблюдать контракт) и на основании этих знаний тестирует Consumer-а и Provider-а. В рамках тестирования всех сервисов является глобальным (чтобы к контрактам можно было легко получить доступ для тестирования любого набора микросервисов).
Коротко: потребляет мало ресурсов, правда менее надежен, интеграционные тесты
Развернуто: Mock - сервис:
заметка: я бы назвал Mock сервис Spoofer (подделка), ниже на изображениях он называется просто Mock (e.g. Pact)
Дополнительный функционал Mock-сервиса:
Чтобы попробовать понять ситуацию целиком, рассмотрим пример когда Consumer является законодателем контракта:

Provider Testing Tool (BYO - bring your own) - инструмент, который Provider использует для тестирования себя.
Важно: последовательность указанная на схеме выше не является обязательной, это лишь пример того, как:
На практике процесс тестирования разделяется на 2 части (тестирование Consumer-a и тестирование Provider-а), коротко:

Рассмотрим процесс прохождения тестов, ориентированных на Consumer-a:

Рассмотрим процесс прохождения тестов, ориентированных на Provider-a:

Данное тестирование реализовывается на основе запросов, которые делает Customer (но без Customer-a) с помощью Mock-сервера.
Чтобы Provider мог обработать тестовые запросы, он должен быть поднят, сконфигурирован и иметь состояние (данные в результате которых, он сможет вернуть правильный response), данное состояние он может получать до начала тестирования производимое Mock-сервером, например:

Желательно: каждое взаимодействие должно проверяться изолированно, без сохранения контекста предыдущих взаимодействий.
Сервисы часто публикуют доменные события, потребляемые другими сервисами (одним или несколькими). При тестировании нужно убедиться в том, что издатель и его подписчики согласовали канал сообщений и структуру доменных событий.
Тестирование доменного сообщения
Участник - Consumer или Provider, чье доменное сообщение тестируется одним из двух способов:
Важно: вместо брокера обычно используется Mock-сервис.
Тестирование сервисов, которые взаимодействуют с использованием асинхронных запросов/ответов похоже на синхронное тестирование, но обычно асинхронные сервисы (работая например по принципу CQRS) возвращают response говорящий о том, что сообщение принято, но не говорит о том что:
В этом случае Mock-сервис должен проверить пункт 2 (тем самым пункт 1 будет проверен тоже).
Тестирование запроса и результата
Участник - Consumer или Provider, чей результат запроса тестируется так:
Важно: вместо брокера обычно используется Mock-сервис.
1. Тестировать неожиданное поведение, например невалидные данные реквеста, респонса (статусы и другие заголовки, нарушение структур и типизацию данных, выходы за диапазоны возможных значений и т.п.):
2. Маппинг реквестов и респонсов лучше делать вручную (не стоит делать его с помощью автоматической записи, основываясь на реквестах и респонсах, ведь они могут быть быть неверными)

Полезные ссылки:
Источник: 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12