Весеннее микросервисное сквозное тестирование - PullRequest
0 голосов
/ 26 апреля 2018

Я хотел бы написать сквозной тест для конвейера, построенного с пружинной загрузкой.

Рассмотрим два микросервиса A, B, где B потребляет выходные данные от A и создает RESTful API. Они подключаются с помощью rabbitmq и полагаются на внешнюю базу данных.

System scheme

Я хотел бы достичь чего-то вроде:

  1. Создание нового проекта, включающего оба микросервиса
  2. Создание тестовой конфигурации, которая настраивает провайдера JPA в качестве базы данных в памяти
  3. Введите пользовательский MQ в A, B, чтобы соединить их (rabbitmq не тесно связан)
  4. Написать тесты

По существу замена белых частей на макеты и проверка цветных частей.

Имеет ли это смысл? Тестовое покрытие A и B не завершено, и такой тест гарантирует, что контракт между A и B будет выполнен. Есть ли лучшие способы?

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Я бы порекомендовал вам использовать Spring-cloud-contract . Он помогает вам поддерживать контракт между вашими микросервисами (контракты между производителем и потребителем). Он доступен как для HTTP, так и для событий.

0 голосов
/ 26 апреля 2018

Моя первая идея по этому вопросу заключается в том, что если это сквозной тест, то вы должны забыть, какую платформу вы используете, потому что это относится к реализации в этом контексте. Поэтому я хотел бы создать тестовый проект, который, по сути, является файлом docker-compose и определяет 5 контейнеров для

  • сервис A
  • сервис B
  • RabbitMQ
  • может быть, база данных тоже, если вы не хотите придерживаться подхода в памяти
  • и отдельный контейнер для проведения тестов

С этой точки зрения у вас есть 2 способа обработки специфичной для env конфигурации:

  • вы определяете специфичный для теста конфиг в отдельном профиле пружины и активируете его, определяя SPRING_PROFILES_ACTIVE env var в файле docker-compose
  • вы передаете свою конфигурацию в файл свойств и монтируете ее в файл docker-compose

Запуск теста может быть простым, я бы написал набор тестов на основе JUnit, который использует RestAssured или что-то подобное.

Надеюсь, это даст ключ. Конечно, это широкая тема, поэтому углубляться в каждую деталь не вписывается в SO-ответ.

0 голосов
/ 26 апреля 2018

Если у вас есть время, я предлагаю вам прочитать это: https://martinfowler.com/articles/microservice-testing/

Целью сквозного тестирования не является обеспечение 100% покрытия линии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...