Ответ вслух Senior JSON и JSON Schema обновлено

Контрактное тестирование

Вопрос

Что такое контрактное тестирование и когда оно нужнее e2e?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Контракт это договор между потребителем API и провайдером: какие запросы клиент шлёт и что ждёт в ответ.

Что должно прозвучать в ответе

  • Контракт: договорённость о запросах и ответах между потребителем и провайдером API

  • Consumer-driven (Pact): потребитель пишет ожидания, провайдер проверяет их в своём CI

  • Ловит ломающие изменения до деплоя, без поднятия всех сервисов

  • E2E в микросервисах дорогие, медленные и нестабильные

  • Контракт проверяет форму и смысл взаимодействия, а не бизнес-логику целиком

Что могут спросить следом

  • Чем контрактный тест отличается от проверки по OpenAPI?
  • Кто должен поддерживать контракты?
  • Что делать, если провайдер хочет удалить поле?

Разбор

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

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.