Вопрос с собеседования · Spring

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

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

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

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

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

Подробно

Проблема: сервис 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.
  • Отличие от сквозных тестов.

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

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

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

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

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

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования