Тестирование контракта потребителя сервиса — часть 4

от автора

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

  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

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


ссылка на оригинал статьи https://habr.com/ru/articles/573532/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *