Комментарии 5
А мы используем nanocloud
Он позволяет запускать микросервисы каждый со своим класспасом. И не надо предварительно собирать образы, пушить их и т.п. Таким образом можно встраивать написание интеграционных тестов прямо в процесс разработки, запускать их прямо из идеи, использовать их там, где юнит тесты уже не подходят.
Спасибо за то, что поделились опытом! Посмотрю библиотечку на досуге.
Как правило, для интеграционных тестов, помимо запуска микросервисов, требуется поднимать необходимое окружение (бд, брокеры очередей и тд). Подскажите, как вы решаете подобный вопрос?
В статье описывал кейс внедрения интеграционных тестов в CI/CD. Предполагается, что их запуск - отдельный шаг, который может быть обязательным или опциональным. На этом этапе у нас образы уже собраны и запушены, поэтому ничего дополнительно делать не нужно.
По поводу запуска из идеи - вопрос можно решить локальным файлом docker-compose, в котором вместо указания образа, можно описать как собирать и запускать наши приложения.
Про окружение: сейчас мы используем Кафку - ее мы поднимаем также, как и остальные микросервисы. Оракл заменяем на h2. Можно использовать testcontainers - не вижу проблем (мы не используем по бюрократическим причинам)
Про запуск из идеи и docker-compose. Можно так. Я не уверен, но мне кажется, что тогда не получится сделать написание тестов частью разработки. Перед каждым прогоном придется заново паковать. Тут идея в том, что запуск интеграционных тестов с только что сделанными изменениями становится таким же простым, как и запуск юнит тестов.
Но есть и сложности: например, надо сформировать правильный класспас.
Спасибо за ответ!
Вероятно, просто разный подход.
В описанном в статье кейсе предполагается, что интеграционные тесты идут отдельным шагом. На момент их запуска все юнит-тесты пройдены и приложение уже собрано. Интеграционные тесты не такие легковесные, как юнит-тесты и требуют больше времени на запуск. Поэтому они вынесены из этапа сборки в отдельный шаг, чтобы опционально была возможность быстро собирать приложение локально / на фича-ветках без них. На ветках уровня release / master можно сделать данный шаг обязательным.
Интеграционное тестирование микросервисов Spring Boot в монорепозитории