Контрактное тестирование
Вопрос
Что такое контрактное тестирование и когда оно нужнее e2e?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Контракт: договорённость о запросах и ответах между потребителем и провайдером API
Consumer-driven (Pact): потребитель пишет ожидания, провайдер проверяет их в своём CI
Ловит ломающие изменения до деплоя, без поднятия всех сервисов
E2E в микросервисах дорогие, медленные и нестабильные
Контракт проверяет форму и смысл взаимодействия, а не бизнес-логику целиком
Что могут спросить следом
- Чем контрактный тест отличается от проверки по OpenAPI?
- Кто должен поддерживать контракты?
- Что делать, если провайдер хочет удалить поле?
Разбор
Контракт это договор между потребителем API и провайдером: какие запросы клиент шлёт и что ждёт в ответ. В consumer-driven подходе, например в Pact, потребитель в своих тестах описывает ожидания, из них получается файл-контракт, его публикуют в общий брокер, а провайдер в своём CI прогоняет все контракты своих потребителей против себя. Если разработчик провайдера переименовал поле, у него сразу падает проверка с указанием, какой клиент сломается. Почему это лучше e2e в микросервисах: чтобы проверить ту же связку сквозным тестом, нужно поднять десяток сервисов с данными, такие тесты медленные и падают от посторонних причин. Контракты быстрые и точно указывают виновника. Отличие от проверки по OpenAPI: спецификация говорит, что провайдер обещает, а контракт что реально использует клиент. Поэтому удалить поле, которое никто не использует, можно спокойно, а если оно в контракте, сначала договариваемся с потребителем.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.