Тестирование контракта потребителя сервиса — часть 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/company/otus/blog/573532/


Интересные статьи

Интересные статьи

В третьей части публикации о составном устройстве USB я расскажу о том, как переделать сгенерированный в STM32CubeMX USB Audio Speaker, описанный во второй части публикации, в дуплексно...
В прошлый раз мы осваивали создание нового проекта при помощи STM CubeMX первую часть можно найти здесь. Для тех, кому лень перечитывать — закончилось все тем, что пустой проект успешно собрался...
В последнее время на Хабре стали чаще появляться посты о том, как хорош Telegram, как гениальны и опытны братья Дуровы в построении сетевых систем, и т.п. В то же время, очень мало кто действител...
Игры начинают становиться всё менее деревянными, в некоторых случаях начинает проявляться оказуаливание — упор на графику и упрощение игрового процесса в сравнении с предыдущими играми этого жанр...
В связи с участившимися вопросами от друзей и знакомых с ключевой фразой «какой дозиметр купить? а у тебя самого что?» решил я собрать воедино разбросанную в разных местах информацию и рассказать...