![](http://webcf.waybackmachine.org/web/20210825183244im_/https://habrastorage.org/getpro/habr/avatars/b9f/baf/5f9/b9fbaf5f96ae52973706a0716bd9216e.jpg)
Тестирование контракта потребителя сервиса — часть 4
- Перевод
![](https://webcf.waybackmachine.org/web/20210825183244im_/https://habrastorage.org/getpro/habr/upload_files/1d8/af8/cd1/1d8af8cd150b51801569f4bdf0e78f6c.png)
В этой серии блогов мы рассмотрели:
Тесты контрактов на основе Pact для сервисов, взаимодействующих синхронно
Тесты контрактов на основе Pact для сервисов, взаимодействующих асинхронно
Давайте перейдем к следующей теме. Pact брокер!
До сих пор мы видели, что потребитель публикует контракт в локальной директории. Провайдер забирает контракт из этой директории. Это самый простой способ обмена контрактами. И, возможно, наиболее подходящий в процессе его изучения. Однако в реальных проектах это не сработает. Часто в разработке участвуют несколько человек, команд, поэтому нам нужно централизованное место для размещения всех контрактов. Pact Foundation решил эту проблему с помощью брокера. Брокер - это структура, где потребители могут публиковать свои контракты, а провайдеры - результаты проверки.
![](https://webcf.waybackmachine.org/web/20210825183244im_/https://habrastorage.org/getpro/habr/upload_files/e2a/169/527/e2a169527c0ec7f196839186bcdfd6b7.png)
Установить брокер локально очень просто. Мы будем использовать docker-compose. Ниже приведена конфигурация.
version: "2.4"
services:
postgres-db:
image: postgres:latest
container_name: postgres-db
ports:
- "5432:5432"
environment:
POSTGRES_USER: <username>
POSTGRES_PASSWORD: <password>
POSTGRES_DB: pactdb
pact-broker:
image: pactfoundation/pact-broker:latest
container_name: pact-broker
depends_on:
- postgres-db
ports:
- "9292:9292"
environment:
PACT_BROKER_DATABASE_URL: "postgres://<username>:<password>@postgres-db/pactdb"
Выполните команду docker-compose up и откройте домашнюю страницу брокера (http://localhost:9292).
![](https://webcf.waybackmachine.org/web/20210825183244im_/https://habrastorage.org/getpro/habr/upload_files/582/1dc/6eb/5821dc6ebb9ff0453e9899e54500b55f.png)
На домашней странице брокера отображается образец контракта между Example API и Example App. На ней отображаются детали, например, когда потребитель опубликовал контракт и провайдер проверил его. Здесь также отображается статус Webhook. Мы рассмотрим это позже.
Теперь у нас есть локально запущенный брокер, так что давайте его использовать. Сначала нам нужно добавить поддержку публикации контракта в брокере. Обновите build.gradle, следуя приведенным ниже инструкциям.
buildscript {
dependencies {
classpath("au.com.dius.pact.provider:gradle:4.1.0")
}
}
apply plugin: "au.com.dius.pact"
pact {
publish {
pactBrokerUrl = "http://localhost:9292"
pactDirectory = "target/pacts"
}
}
По сути, мы добавили gradle-плагин pact. И настроили gradle-задачу pactPublish. Напомним, что потребительские тесты генерируют контракты. И они сохраняются в каталоге target/pacts. Теперь мы опубликуем эти контракты в брокере. Запустите gradle-задачу pactPublish и обновите страницу брокера. На ней вы найдете зарегистрированные контракты. Поздравляем!
![](https://webcf.waybackmachine.org/web/20210825183244im_/https://habrastorage.org/getpro/habr/upload_files/1a0/331/9e3/1a03319e366d3376c770b737d3f0abed.png)
Давайте обновим тесты провайдера. Помните, как мы передаем информацию о контракте в тесты провайдера? С помощью аннотации, как показано ниже.
@PactFolder("target/pacts")
@Provider("fraud_service")
Замените аннотацию pactFolder на
@PactBroker(host = "localhost", port = "9292")
Запустите тесты провайдера. Теперь даже результат проверки начнет отображаться на брокере. Нажмите на кнопку 'View pact matrix'. Должна появиться информация о верификации, как показано ниже.
![](https://webcf.waybackmachine.org/web/20210825183244im_/https://habrastorage.org/getpro/habr/upload_files/ad7/383/838/ad73838389f0f397d016710af3edfc7e.png)
На сегодня это все. Мы рассмотрели, что такое pact broker, как установить его на локальной машине с помощью docker compose. Мы также рассмотрели публикацию контракта и верификацию результатов проверки на брокере. В следующем блоге мы расскажем о том, как обеспечить выполнение этих проверок контракта с помощью брокера.
Материал подготовлен в рамках курса «Разработчик на Spring Framework».
Всех желающих приглашаем на второй день двухдневного онлайн-интенсив «Работа с реляционными БД с помощью Spring». На двух занятиях вы узнаете, как работать с БД помощью разных технологий: JDBC, JPA + Hiberante, а также разберемся, какую помощь предлагают в этом различные проекты Spring - Spring JDBC, Spring ORM, Spring Data JPA и Spring Data JDBC
Комментарии 0
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.