Как запустить тесты после развертывания с помощью Maven?
Я пытаюсь решить, как создать набор приемочных тестов для веб-приложения Java-EE.
вот настройка: Maven используется для создания файла войны и развертывания его в Glassfish. При развертывании схема базы данных MySQL автоматически обновляется из классов моделей с помощью Hibernate (опция" hbm2ddl=auto").
приемочные тесты должны протестировать развернутый код, вызвав различные методы и проверив результаты, как ожидалось(*). Мы написали еще набор пакетов для подключения к существующей системе, поэтому приемочные тесты должны показать, как они могут быть интегрированы в существующую кодовую базу.
(*) Это может звучать больше как модульное/интеграционное тестирование, но они являются приемочными тестами в том смысле, что они должны доказать, что мы сделали, и их нужно запустить после развертывания, чтобы была база данных.
из вышесказанного, мое текущее мышление-использовать JUnit для проверки ожидаемых значений и т. д. То, с чем я борюсь. как вызвать эти тесты после развертывания. "развертывание" - это последняя фаза Maven, поэтому не уверен, что это возможно?
2 ответов
только потому, что эта фаза называется deploy
не означает, что вы должны использовать его для развертывания вашего приложения для тестирования. Фактически, он должен использоваться только для "развертывания" артефакта в репозитории maven. Прочитайте описание фазы жизненного цикла Maven и вы увидите, что есть несколько этапов, посвященных вашем случае использовать:
pre-integration-test
integration-test
post-integration-test
посмотреть плагин Cargo Maven. Это сделано для развертывания вашего файла WAR в различных контейнеры для испытаний. Они определенно показывают демонстрации случаев использования, подобных тому, который вы описываете на своем сайте. Я ожидал бы, что в конечном итоге вы можете использовать груз для развертывания в своем контейнере (с одного из ранних этапов, таких как pre-integration-test )
Примечание, Дженкинс также имеет плагин, который является оболочкой вокруг плагина Cargo. Поэтому вы можете сделать то, что вам нужно, через Дженкинса. Также обратите внимание, что вам не нужно запускать задание сборки Jenkins как mvn clean deploy. Вы могли бы иметь одну работу построить просто запускает интеграционные тесты и запускает другое задание "развертывание" только тогда, когда оно успешно выполняется.
Если вам действительно нужно сделать что-то после развертывания, то вы можете запустить failsafe и, следовательно, JUnit) как часть фазы развертывания.
Что я обычно делаю, если есть отдельный модуль. Таким образом, вы можете иметь один проект maven, который содержит ваш проект и отдельный проект "теста развертывания". Затем построение родительского проекта будет создавать и запускать war, а затем запускать тесты развертывания. Вы можете использовать junit как обычно.
второй лучше вписывается в Дженкинса потому что у вас все еще будет один проект.