Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JUGNsk Meetup #5. Максим Ястребов: "Consumer-Driven Contract Tests with Spring Cloud Contract"

jugnsk
December 15, 2018

JUGNsk Meetup #5. Максим Ястребов: "Consumer-Driven Contract Tests with Spring Cloud Contract"

В распределенных системах, таких как микросервисные приложения, тестирование взаимодействия между различными ее составными частями является очень важной задачей. Зачастую для ее решения используются End-To-End тесты, но существует специализированный подход - использование паттерна Consumer Driven Contract (CDC). Основная идея паттерна CDC - это публикация контракта взаимодействия, и написание на его основе тестов для всех сторон, использующих и реализующих этот контракт. Одним из инструментов, который применяет принцип CDC является Spring Cloud Contract. В докладе я расскажу об этом инструменте и покажу примеры его использования на нашем опыте. Расскажу какие цели ставили, чего достигли и как.

jugnsk

December 15, 2018
Tweet

More Decks by jugnsk

Other Decks in Programming

Transcript

  1. Copyright © Eastbanc Technologies 2018. All rights reserved. 2018 Ястребов

    Максим Consumer-Driven Contract tests with Spring Cloud Contract
  2. План 1. Монолит vs Микросервисы 2. E2E test vs Mock

    test 3. Consumer-Driven contracts 4. Spring Cloud Contract 5. Демо 2
  3. План 1. Монолит vs Микросервисы 2. E2E test vs Mock

    test 3. Consumer-Driven contracts 4. Spring Cloud Contract 5. Демо 3
  4. Ошибки в контракте взаимодействия обнаруживается на этапе компиляции 1. Код

    разных микросервисов находится в разных репозиториях 2. Проблемы в контракте невозможно отследить на этапе компиляции Монолит Микросервисы 4
  5. План 1. Монолит vs Микросервисы 2. E2E test vs Mock

    test 3. Consumer-Driven contracts 4. Spring Cloud Contract 5. Демо 5
  6. 1. Сложно 2. Одновременно только один тест 3. Медленно 4.

    Проблематично дебажить 5. Нестабильные 1. Близкое к реальному окружение 2. Реальное взаимодействие микросервисов - + End-to-end test 8
  7. 1. stub-ы никак не связаны с реальными микросервисами. 1. Изолированные

    2. Легко писать 3. Быстрые 4. Стабильные - + Mock test 10
  8. План 1. Монолит vs Микросервисы 2. E2E test vs Mock

    test 3. Consumer-Driven contracts 4. Spring Cloud Contract 5. Демо 11
  9. План 1. Монолит vs Микросервисы 2. E2E test vs Mock

    test 3. Consumer-Driven contracts 4. Spring Cloud Contract 5. Демо 13
  10. Spring Cloud Contract Workflow Consumer of an API 1. Написать

    groovy контракт, описывающий взаимодействие с API 2. Создать pull request в репозиторий producer 3. Написать тест для клиента, использующий wireMock stub Producer of an API 1. Принять pull request с контрактом 2. Добавить spring cloud contract maven/gradle плагин 3. Сгенерировать тесты и stub 4. Задеплоить сгенерированные stub в репозиторий 16
  11. План 1. Монолит vs Микросервисы 2. E2E test vs Mock

    test 3. Consumer-Driven contracts 4. Spring Cloud Contract 5. Демо 22
  12. Выводы Consumer-Driven Contracts 1. Можно и нужно писать по TDD.

    Как следствие мы получаем 100% тестовое покрытие. 2. Это не больше не меньше описание всех возможных кейсов использования API Spring Cloud Contract 1. Это удобный, гибкий и расширяемый DSL для написания контрактов 2. Автоматическая генерация тестов и stub-ов 3. Поддержка широкого набора тестовых фреймворков: Junit4, Junit5, Spok 4. Интеграция со Spring Cloud 5. Интеграция с MockMvc 23
  13. О чем еще можно поговорить? 1. Тестирование асинхронного взаимодействия •

    Apache Camel • Spring Integration • Spring Cloud Stream • Spring AMQP 2. Поддержка контрактов Pact 3. Интеграция со Spring RestDocs 4. Использование с WebFlux 5. И многое другое) 24