2009-03-11 9 views
3

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

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

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

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

ответ

1

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

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

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

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

+0

Таким образом, единственный способ проверить статус развертывания - это «ping» мое приложение, если нет ответа, а затем ждать и пингу в течение некоторого времени? – andrey

+0

Да; нет способа сделать ваш контейнер отправленным событием, чтобы Webapp был готов. Фактически, приложение никогда не «готово», так как контейнер будет стараться максимально отложить загрузку. Вот почему я никогда не развертываю и не запускаю все мои тесты inline с помощью mockrunner. –

+0

Вы можете позволить инструменту сделать это за вас и выполнить ваши тесты, как только это будет сделано. См. Мой ответ на Cargo. –

0

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

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

Карл

6

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

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

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

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

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

+0

У груза 0.9 есть проблемы, с тем чтобы точно определить, запущен ли Tomcat и правильно ли установлено приложение. Я вернулся, чтобы использовать свой собственный скрипт, который мог бы убить Tomcat, очистить каталог webapps от любых остатков и т. Д. –

+0

Действительно? Это известная проблема? Конечно, это может быть ошибка, но я никогда не сталкивался с этой проблемой с Cargo и Tomcat. В любом случае, ошибка не изменит цель Карго. –

+0

К сожалению, на данный момент Cargo не поддерживает горячее развертывание поверх ant-задачи, но именно по этой причине я могу добавить эту поддержку самостоятельно. – andrey

1

Другой вариант - использовать JBoss Server Ant Tasks.

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

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