Что проверяют контрактные тесты между сервисами?
- Что такое Spring Cloud Contract и Pact?
Контрактные тесты проверяют, что провайдер API не ломает ожидания потребителя: потребитель фиксирует, какие запросы делает и какие поля читает, провайдер в своей сборке проверяет, что выполняет все контракты.
- Заменяют хрупкие сквозные тесты всей системы
- Pact — контракты от потребителя и брокер контрактов
- Spring Cloud Contract — контракты в DSL, из них тесты провайдера и стабы для потребителя
А ещё Проверяют совместимость формата, а не бизнес-логику
Подробно
Проблема: сервис A вызывает сервис B. Unit-тесты A используют заглушку B, которая может не совпадать с реальным B. Сквозные тесты всей системы медленные, хрупкие и требуют поднять всё окружение.
Контракт — описание взаимодействия: запрос (метод, путь, заголовки, тело) и ожидаемый ответ (статус, нужные поля и их типы).
Consumer-driven (Pact):
- тест потребителя работает с мок-сервером Pact и записывает контракт — только то, что потребитель реально использует;
- контракт публикуется в Pact Broker;
- сборка провайдера проигрывает все контракты против настоящего приложения;
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?
Разбор темы
- Тестирование Spring Boot
Пирамида тестов, unit без Spring, slice-тесты, @SpringBootTest и @MockBean, MockMvc/WebTestClient, Testcontainers и контрактные тесты.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.