Как автоматизировать сборку, развертывание и тестирование Java-приложения? - PullRequest
3 голосов
/ 11 марта 2009

На данный момент у меня есть веб-проект Java, который автоматически создается и развертывается на JBoss, просто копируя архив ear в каталог сервера (все с использованием Ant).

Мне нужен механизм, позволяющий не только автоматически развертывать приложение, но и проверять, успешно ли развернуто приложение, и запускать на нем тесты HttpUnit.

Проблема заключается в том, как автоматически отслеживать процесс развертывания, чтобы дождаться момента, когда развертывание завершится, и только после этого запустить тесты. Поэтому я хочу создавать, развертывать, запускать тесты в один клик (для этого я использую круиз-контроль).

Буду признателен за любые предложения по решению проблемы.

Ответы [ 4 ]

6 голосов
/ 12 марта 2009

Здесь необходимо запустить контейнер и развернуть приложение из сценария сборки, прежде чем запускать тесты в зависимости от развернутого приложения. Это типичная потребность в интеграционных тестах, сквозных / функциональных тестах, тестах пользовательского интерфейса.

Проблема в том, что мы не можем просто «запустить и забыть» запуск контейнера и запустить тестовое задание / цель. Нам нужно подождать, пока приложение будет развернуто, прежде чем запускать тесты, и это займет некоторое время. Чтобы быть уверенным, что мы сможем запустить тесты, когда все будет готово, сборка должна запустить контейнер и развернуть приложение блокирующим способом.

Это точно , о чем Груз . Cargo - это Java API для запуска / остановки вашего контейнера и развертывания приложения. Он обеспечивает логику, описанную выше, и может использоваться из Java, Ant или Maven.

Если вы используете Maven, жизненный цикл сборки уже включает в себя что-то для вас с фазой «интеграция-тест». Этот этап обычно используется для ... интеграционных тестов и включает этапы "pre-интеграционный тест" и "постинтеграционный тест". Здесь вы можете подключить цели грузовой старт / стоп. Если вы используете муравья, вы можете использовать задачу муравья груза.

Другая опция, основанная на maven, описана в Руководстве по настройке подключаемого модуля Mavan Jetty . Идея точно такая же, как и выше, за исключением того, что вы используете плагин пристани вместо груза, чтобы запустить причал во время «теста перед интеграцией» и остановить его во время «теста после интеграции».

1 голос
/ 14 апреля 2009

Другой вариант - использовать Задачи Ant сервера JBoss .

Приятная особенность этих задач в том, что они будут блокироваться до полного запуска JBoss, поэтому опрос не требуется. Они также потерпят неудачу, если JBoss не запустится в течение требуемого времени ожидания, и попытаются отключить JBoss при выключении JVM, если вы не можете из-за какой-либо ошибки. Я считаю, что эти задачи используются для тестового набора JBoss.

Я также слышал хорошие вещи о грузе. Преимущество этого в том, что ваши скрипты сборки не являются специфичными для JBoss. Я думаю, что плагин JBoss Cargo поддерживается некоторыми ребятами из JBoss, насколько я знаю.

1 голос
/ 11 марта 2009

Создайте базовый класс тестирования, из которого будут получены все остальные тесты. Он должен быть абстрактным, чтобы автоматический сборщик тестов не запускал его.

В этом классе добавьте этот код в setUp ():

if (checkIsDeployed) {
    ... run code to verify your app is ready for testing and wait until it is ...
    checkIsDeployed = true;
}

checkIsDeployed должно быть статичным.

0 голосов
/ 11 марта 2009

Вы можете использовать механизм сборки hudson: https://hudson.dev.java.net/, чтобы помочь вам запускать события в определенное время.

Я знаю, что hudson можно использовать для запуска модульных тестов, а автоматическое развертывание можно осуществить, вызвав ant.

Карл

...