#testing #pact
#тестирование #пакт
Вопрос:
Привет, провожу некоторые предварительные исследования относительно тестирования контракта с использованием PACT. В парадигме, в которой я использую брокера pact для размещения соглашений, я понимаю с высокого уровня, что на стороне потребителя должен быть контрактный тест, который запускает набор тестов на макетном сервере pact…которые затем будут опубликованы посреднику pact. Поставщику также потребуется контракт, в котором он использует соглашение, созданное потребителем в pact broker, для запуска своего теста.
Мой вопрос заключается в следующем: на стороне потребителя есть ли необходимость писать несколько разных тестов для каждой конечной точки?
Ответ №1:
Короткий ответ — да.
Это зависит от того, что делает каждая из конечных точек API. Но обычно каждая конечная точка может обрабатывать разные операции, и в зависимости от запроса вы хотели бы убедиться, что ваш код может справиться с этим (если он использует все эти операции — что важно).
например, следующее довольно типично для сервиса, подобного CRUD:
- ПОЛУЧЕНИЕ
/<resource>
с действительным запросом, возвратом200
и телом ресурса - ПОЛУЧАЕМ
/<resource>
с ошибочным запросом, возвращаем400
и текст ошибки - ПОЛУЧИТЬ
/<resource>
без токена аутентификации, вернуть401
- ОПУБЛИКОВАТЬ
/<resource>
с действительным запросом, возвратом201
и идентификатором ресурса / телом - УДАЛИТЬ
/<resource>
… и так далее
Внутри каждой операции и ресурса могут быть полиморфные полезные нагрузки (запросы или ответы). Если ваш потребительский код должен иметь дело с этим, в нем также должны быть тесты для них.
Возможно, вы найдете эту страницу в наших документах полезной по этой теме.
Ответ №2:
Если под конечной точкой вы подразумеваете разные API в разных доменах, то да.
Концепция pact заключается в обеспечении взаимодействия между любой парой потребитель / поставщик. В качестве примера, если у вас есть интерфейс SPA (потребитель), который использует 2 разных API (провайдера), таких как API аутентификации (ie. auth.yourdomain.com ) и API данных (например, data.yourdomain.com ), вы захотите записать взаимодействия между вашим интерфейсом и API аутентификации в виде одного контракта и другого контракта между интерфейсом и вашим API данных.
Каждый из этих контрактов будет иметь по крайней мере одно взаимодействие, но может иметь много, например, когда вы выполняете запрос GET в корневом каталоге API аутентификации, он возвращает X, если вы делаете POST в / auth с именем пользователя / паролем в теле, он возвращает Y и т.д.
Имеет ли это смысл?