2017-02-21 2 views
0

У меня есть restFul API http://localhost:8080/books/ {id}, которые возвращают книгу с определенным ID.PACT: Как иметь динамический путь с достоверными данными, которые присутствуют в базе данных поставщика

например:

GET http://localhost:8080/books/1

возвратит

{ "ID": 1, "страницы": 20, "цена": 100 }

GET http://localhost:8080/books/2

вернет

{ "Идентификатор": 2, "страница": 30, "цена": 120 }

я написал мои ожидания потребителей с использованием регулярных выражений вместо {ID} и сгенерировал ПАКТ ,

Данных в настоящее время нет на складе. (информации о книге нет в базе данных). Когда я запускаю pact verfication на стороне поставщика, он терпит неудачу, поскольку он не может получить какую-либо информацию, нажав на фактический сервис, чтобы перекрестно проверить контракт.

Можно ли подтвердить контракт без данных, содержащихся в базе данных поставщика? или есть ли обходной путь для того же самого?

Также БД поставщика может измениться, если мы развертываем поставщика в нескольких средах, как справиться с этим?

Оцените справку. Благодарю.

+0

В принципе, как данные обрабатываются в ПАКТ? Как предоставить правильные данные поставщику, чтобы возвращаемый ответ был 200, который нам нужен. – Sam

ответ

0

Почему вы хотите обходным путем? Точка тестирования контракта - это то, что вы можете убедиться, что обе стороны контракта выполнены правильно!

Возможно, вы захотите посмотреть на государства-поставщики [1].

Какой язык вы используете?

Предоставленная статья дает вам некоторый фон. В JVM вы можете посмотреть аннотацию @State https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-provider-junit#example-of-http-test.

У вашего потребителя вы должны указать состояние, такое как «Учитывая, что книга с идентификатором 1 существует». Со стороны провайдера инфраструктура будет ссылаться на аннотацию @State, соответствующую этому ожиданию. Это дает вам возможность гарантировать наличие любых данных состояния (в данном случае, этой книги) до запуска тестового примера.

[1] https://docs.pact.io/documentation/provider_states.html

+0

Спасибо за вашу поддержку. Если я правильно понял, если его пустая БД со стороны провайдера, провайдеру необходимо вставить некоторые данные (либо с использованием состояний поставщика, либо каким-либо другим способом). Тогда только запрос будет отправлен провайдеру, чтобы получить ответ 200. Правильно ли я понимаю? – Sam

+0

Да, при тестировании модуля JVM будет вызываться аннотация @State, соответствующая указанному потребителю состоянию (в данном случае «Учитывая, что книга с идентификатором 1 существует») перед выполнением теста против Провайдера.Это дает Провайдеру возможность настроить тестовое оборудование перед началом тестирования. –

+0

Получил это ясное, большое спасибо! Один последний запрос (поскольку я совершенно не знаком с PACT). Итак, в этом случае конечная точка, указанная в контракте потребителем, будет содержать идентификатор (например, book-Id 1) справа ?. Что в конечном итоге означает, что конечная точка контракта будет содержать в нем жестко закодированное значение, которое будет вставлено поставщиком в его БД. Мы думали, разве это не выглядит странно? например:/bookStore/bookId/1 (это будет присутствовать в контракте PACT, определяемом потребителем). – Sam