В этой серии блогов мы рассмотрели:

  1. Введение

  2. Тесты контрактов на основе Pact для сервисов, взаимодействующих синхронно

  3. Тесты контрактов на основе 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

→ РЕГИСТРАЦИЯ

Комментарии (0)