Я успешно прошел такой тест. Вам нужен тестовый экземпляр RabbitMQ, тестовый обмен для отправки сообщений и тестовая очередь для подключения к получению сообщений.
Не надо издеваться над всем!
Но для тестового потребителя, производителя и тестового экземпляра rabbitMQ в этом тесте нет действительного производственного кода.
использовать тестовый экземпляр rabbitMQ и реальное приложение
Для получения полного теста я бы использовал тестовый экземпляр RabbitMQ, обмен и очередь, но оставлял реальное приложение (производитель и потребитель).
Я бы реализовал следующий сценарий
когда тестовое приложение выполняет тестовое сообщение для rabbitMQ
затем количество полученных сообщений в rabbitMQ увеличивается затем
приложение делает то, что должно делать при получении сообщений
Шаги 1 и 3 зависят от приложения. Ваше приложение отправляет сообщения в rabbitMQ на основе какого-либо внешнего события (получено сообщение HTTP «событие таймера»). Вы можете воспроизвести такое условие в своем тесте, поэтому приложение отправит сообщение (для проверки экземпляра rabbitMQ).
Та же история для проверки действия приложения при получении сообщения. Приложение должно делать что-то наблюдаемое при получении сообщений.
Если приложение выполняет HTTP-вызов, вы можете смоделировать эту конечную точку HTTP и проверить полученные сообщения. Если приложение сохраняет сообщения в базе данных, вы можете объединить базу данных для поиска вашего сообщения.
использовать API мониторинга rabbitMQ
Шаг 2 может быть реализован с использованием API-интерфейса мониторинга RabbitMQ (существуют методы для просмотра количества сообщений, полученных и использованных из очереди https://www.rabbitmq.com/monitoring.html#rabbitmq-metrics)
рассмотрите возможность использования пружинного башмака для проверки работоспособности
Если вы используете Java, а затем использование Spring Boot значительно упростит вашу проблему. Вы автоматически получите проверку здоровья для вашего соединения rabbitMQ!
См. https://spring.io/guides/gs/messaging-rabbitmq/, чтобы узнать, как подключиться к RabbitMQ с помощью Spring boot.
Загрузочное приложение Spring предоставляет информацию о работоспособности (используя конечную точку HTTP / работоспособность) для каждого подключенного внешнего ресурса (базы данных, сообщений, jms и т. Д.)
Подробнее см. https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html#_auto_configured_healthindicators.
Если соединение с rabbitMQ не работает, проверка работоспособности (выполняется org.springframework.boot.actuate.amqp.RabbitHealthIndicator) возвращает HTTP-код 4xx и среднее json-сообщение в теле JSON.
Вам не нужно ничего делать для проверки работоспособности - просто используйте org.springframework.boot: spring-boot-starter-amqp, так как зависимости maven / gradle достаточно.
CI test- из каталога src / test
Я написал такой тест (который подключается к внешнему тестовому экземпляру RabbitMQ) с использованием интеграционных тестов в каталоге src / test. При использовании Spring Boot это проще всего сделать с помощью тестового профиля и подробных данных о подключении для тестирования экземпляра RabbitMQ в application-test.properties (production может использовать производственный профиль и файл application-production.properties с производственным экземпляром RabbitMQ).
В простейшем случае (просто проверьте соединение с rabbitMQ) все, что вам нужно, это нормально запустить приложение и проверить конечную точку / работоспособность.
В этом случае я бы сделал следующие шаги CI
- тот, который строит (gradle build)
- тот, который запускает модульные тесты (тесты без каких-либо внешних зависимостей)
- тот, который запускает интеграционные тесты
CI тест - внешний
Вышеописанный подход также может быть реализован для приложения, развернутого в тестовой среде (и подключенного к тестовому экземпляру rabbitMQ). Как только приложение запускается, вы можете проверить / Health Endpoint, чтобы убедиться, что оно подключено к экземпляру rabbitMQ.
Если вы заставляете ваше приложение отправлять сообщения в rabbitMQ, то вы можете наблюдать метрики rabbbitMQ (используя API мониторинга rabbitMQ) и наблюдать внешние эффекты использования сообщения приложением.
Для такого теста вам нужно запустить и развернуть приложение из CI перед началом тестирования.
для этого сценария я бы сделал следующие шаги CI
- шаг, который строит приложение
- шагов, которые запускают все тесты в каталоге src / test (модуль, интеграция)
- шаг, который развертывает приложение в тестовой среде или запускает докеризованное приложение
- шаг, который запускает внешние тесты
- для среды Docker, шаг, который останавливает Docker-контейнеры
Рассмотрим докеризированную среду
Для внешнего теста вы можете запустить ваше приложение вместе с тестовым экземпляром RabbitMQ в Docker. Вам понадобятся два док-контейнера.
Для запуска этих двух образов наиболее разумно написать файл docker-compose.