⚛️
Контрактное тестированиеУровень сложности-->🤓🤓🤓🤓🤯
(4 из 5)
А кто говорил, что будет легко?))
Что это?Позволяет проводить тестирование взаимодействия нескольких компонентов отдельно друг от друга.
Представьте, что два микросервиса обмениваются данными.
Один из них потребитель (клиент).
Второй - поставщик.
НапримерСервис №1 вызывает api сервиса №2.
В ответ сервис №1 ожидает получить статус выполнения - Код 200.
В данном случае:
сервис №1 - потребитель(клиент, consumer)
сервис №2 - поставщик(provider)
Разница между обычным интеграционным и контрактным тестированием.При обычном интеграционном тестировании нам нужно было, чтобы оба сервиса были установлены/ включены на стенде тестирования.
Контрактное тестирование позволяет проверить основные моменты интеграции без доступности другого сервиса.
Как?Делается это обычно с помощью моков(заглушек).
В нашем примере, сервис №2 заменяется заглушкой(моком).
В тестах проверяется реакция сервиса №1 на присланный код 200.
Как вы могли догадаться, делается это с помощью автотестов.
Моки знают как отвечать на заранее известные http-запросы.
И тогда схема тестирования выглядит так:1️⃣Сервис №1 (потребитель) проверятся с помощью моков
2️⃣Взаимодействие фиксируется в виде контракта
3️⃣Контракт передается в команду Сервиса №2
4️⃣Запросы из контракта вызывают апи сервиса №2, проверяются ответы апи и соответствуют ли они ожиданиям потребителя.
5️⃣Сервис №2 (поставщик) публикует результат проверки
Таким образом удается независимо проверить каждую сторону взаимодействия.
🔆🔆🔆
Данный вид тестирования не заменяет обычного интеграционного тестирования, но может быть проведен гораздо раньше него.
Контрактные тесты добавляют в регресс.
И это подвид интеграционного тестирования.
Например, проверять содержимое возвращаемое реальным апи, вы уже будете на этапе полноценного интеграционного тестирования.
Такой подход контрактный тестов относительно потребителя называется еще
Consumer Driven Contract.
Бывает противоположный подход, когда пишут контрактные тесты со стороны поставщика, но такое можно встретить не часто.
Так же есть специальные инструменты, помогающие в контрактном тестировании:
PactFlowSpring Cloud Contracts#контрактное_тестирование #cdc #contract_test
@testorest