В этой серии блогов мы рассмотрели:
Тесты контрактов на основе Pact для сервисов, взаимодействующих синхронно
Тесты контрактов на основе Pact для сервисов, взаимодействующих асинхронно
Давайте перейдем к следующей теме. Pact брокер!
До сих пор мы видели, что потребитель публикует контракт в локальной директории. Провайдер забирает контракт из этой директории. Это самый простой способ обмена контрактами. И, возможно, наиболее подходящий в процессе его изучения. Однако в реальных проектах это не сработает. Часто в разработке участвуют несколько человек, команд, поэтому нам нужно централизованное место для размещения всех контрактов. Pact Foundation решил эту проблему с помощью брокера. Брокер - это структура, где потребители могут публиковать свои контракты, а провайдеры - результаты проверки.
Установить брокер локально очень просто. Мы будем использовать 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).
На домашней странице брокера отображается образец контракта между 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 и обновите страницу брокера. На ней вы найдете зарегистрированные контракты. Поздравляем!
Давайте обновим тесты провайдера. Помните, как мы передаем информацию о контракте в тесты провайдера? С помощью аннотации, как показано ниже.
@PactFolder("target/pacts")
@Provider("fraud_service")
Замените аннотацию pactFolder на
@PactBroker(host = "localhost", port = "9292")
Запустите тесты провайдера. Теперь даже результат проверки начнет отображаться на брокере. Нажмите на кнопку 'View pact matrix'. Должна появиться информация о верификации, как показано ниже.
На сегодня это все. Мы рассмотрели, что такое pact broker, как установить его на локальной машине с помощью docker compose. Мы также рассмотрели публикацию контракта и верификацию результатов проверки на брокере. В следующем блоге мы расскажем о том, как обеспечить выполнение этих проверок контракта с помощью брокера.
Материал подготовлен в рамках курса «Разработчик на Spring Framework».
Всех желающих приглашаем на второй день двухдневного онлайн-интенсив «Работа с реляционными БД с помощью Spring». На двух занятиях вы узнаете, как работать с БД помощью разных технологий: JDBC, JPA + Hiberante, а также разберемся, какую помощь предлагают в этом различные проекты Spring - Spring JDBC, Spring ORM, Spring Data JPA и Spring Data JDBC