Получить доступ

Что проверяют контрактные тесты между сервисами?

MiddleТестирование Spring BootSpring Cloud
Ещё спрашивают так:
  • Что такое Spring Cloud Contract и Pact?
Коротко

Контрактные тесты проверяют, что провайдер API не ломает ожидания потребителя: потребитель фиксирует, какие запросы делает и какие поля читает, провайдер в своей сборке проверяет, что выполняет все контракты.

  • Заменяют хрупкие сквозные тесты всей системы
  • Pact — контракты от потребителя и брокер контрактов
  • Spring Cloud Contract — контракты в DSL, из них тесты провайдера и стабы для потребителя

А ещё Проверяют совместимость формата, а не бизнес-логику

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Проблема: сервис A вызывает сервис B. Unit-тесты A используют заглушку B, которая может не совпадать с реальным B. Сквозные тесты всей системы медленные, хрупкие и требуют поднять всё окружение.

Контракт — описание взаимодействия: запрос (метод, путь, заголовки, тело) и ожидаемый ответ (статус, нужные поля и их типы).

Consumer-driven (Pact):

  1. тест потребителя работает с мок-сервером Pact и записывает контракт — только то, что потребитель реально использует;
  2. контракт публикуется в Pact Broker;
  3. сборка провайдера проигрывает все контракты против настоящего приложения;
  4. can-i-deploy перед выкаткой проверяет совместимость версий.

Spring Cloud Contract: контракты пишутся в Groovy или YAML; плагин генерирует тесты провайдера и стабы WireMock, которые потребитель подключает в тестах (@AutoConfigureStubRunner).

Что даёт: поломка API видна в сборке провайдера до выкатки, без общего окружения; провайдер знает, какие поля реально используются. Чего не даёт: проверки бизнес-логики и всей цепочки — для этого остаются интеграционные тесты сервиса и немного сквозных.

Что хотят услышать

  • Что проверяет контрактный тест и зачем.
  • Consumer-driven подход и Pact.
  • Spring Cloud Contract.
  • Отличие от сквозных тестов.

Частые ошибки

  • Проверять в контракте все поля ответа, а не используемые.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Договор producer/consumer: схему, статус-коды, обязательные поля и совместимость событий — до интеграции
  • ✗Покрытие кода unit-тестами
  • ✗Скорость работы базы данных
  • ✗Соответствие UI макетам

Что спросят дальше

  • Чем contract test отличается от e2e?
  • Где хранить consumer contracts?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем