2017-01-25 3 views
0

У меня есть связь между двумя компонентами/микросервисами, где компонент A отправляет события по HTTP компоненту B. В традиционном паттерне HTTP-потребителя/поставщика HTTP A является потребителем B, поскольку A отправляет запрос и B отвечает. Однако в этом случае B является реальным потребителем событий, которые предоставляет A.pact HTTP message consumer

Есть ли способ реализовать тесты потребителя/поставщика, чтобы потребительский тест мог быть записан на принимающей стороне (B), а не на стороне отправки?

Я видел, что были введены сообщения pacts, которые звучат так, как будто они могут быть использованы в этом сценарии, но я не видел каких-либо легко понятных примеров того, как это реализовано, и если оно может использоваться в сочетании с HTTP как в моем сценарии.

Я использую pact-jvm-junit.

ответ

2

Вы указали на два чувства, в которых можно использовать термин потребитель/поставщик - паратор-потребитель/поставщик HTTP и потребитель/поставщик самих данных.

Pact использует только слова потребителя/провайдера HTTP, потому что вы не можете настроить макет в обратном порядке. Вы все равно можете использовать Pact точно так же, как обычно, но на самом деле первым проектом, который использовал Pact, был тот, где данные передавались от клиента javascript к серверу.

Большинство пар HTTP-потребителей/поставщиков имеют двунаправленный поток данных в любом случае. Это редкое приложение, которое доступно только для чтения. Вместо того, чтобы думать об этом как «как я, как потребитель информации, хочу получить данные», подумайте об этом как о том, «как я, как отправитель этих данных, хочу передать его получателю? ».

+0

Первоначально у меня был этот подход. Моя проблема заключается в том, что, по моему мнению, она нарушает принцип договоров с потребителем. Компонент A разработан другой командой и продолжает работу. Будучи потребителем событий A, я хотел бы создать контракт с потребителем в B, чтобы сообщить A, что я ожидаю, чтобы данные событий содержались, чтобы команда, развивающая A, могла убедиться, что они соответствуют ожиданиям моего (B). A на самом деле не потребляет ничего от B, кроме ответа 204. Таким образом, внедряя его в этом направлении, мы потеряли бы ориентированный на тест/потребительский аспект и его преимущества. –

+0

В идеале я хотел бы использовать Http расширенный вариант MessagePact. В качестве эксперимента я попытался реализовать свои тесты с использованием MessagePact вместо этого, и это возможно, хотя я могу только проверить часть сообщения (тело) и потерять специфичные для HTTP части пакта и их проверки. –

+0

Да, у вас там сложный сценарий. Я не уверен, что Пакт может вам помочь. Эта первая услуга, о которой я упомянул, что был использован Пакт, та же команда разработала как потребителя, так и поставщика, поэтому не было той же проблемы. –

Смежные вопросы