如何自动构建,部署和测试java Web应用程序?

时间:2009-03-11 08:56:33

标签: ant jboss build-automation automated-tests

现在我有一个web java项目,它通过将ear archive复制到服务器目录(全部使用Ant)自动构建并部署到JBoss。

我需要的是一种机制,不仅可以自动部署应用程序,还可以验证应用程序是否已成功部署并对其运行HttpUnit测试。

问题是如何自动监视部署过程以等待部署完成时以及仅在运行测试之后。所以我想在“一键”中构建,部署,运行测试(我使用Cruise Control)。

对于解决问题的任何建议,我将不胜感激。

4 个答案:

答案 0 :(得分:6)

这里需要的是启动容器并从构建脚本部署应用程序,然后根据部署的应用程序运行测试。这是集成测试,端到端/功能测试,ui测试的典型需求。

问题是我们不能只是“发射并忘记”容器的启动并运行测试任务/目标。我们需要等待应用程序在运行测试之前部署,这需要一些时间。为了确保我们可以在事情准备就绪时运行测试,构建必须启动容器并以阻塞方式部署应用程序。

完全 Cargo的内容。 Cargo是一个Java API,用于启动/停止容器和部署应用程序。它提供了上述逻辑,可以从Java,Ant或Maven中使用。

如果您正在使用Maven,那么构建生命周期已经包含了“集成测试”阶段的内容。此阶段通常用于...集成测试,并由“预集成测试”和“集成后测试”阶段包装。这是您插入货物启动/停止目标的地方。如果您使用Ant,则可以使用货物的蚂蚁任务。

基于maven的另一个选项在Mavan Jetty Plugin Configuration Guide中有所描述。这个想法与上面的完全相同,只是你在“预集成测试”期间使用jetty插件而不是货物来启动jetty并在“集成后测试”期间停止它。

答案 1 :(得分:1)

创建一个基本测试类,从中导出所有其他测试。它必须是抽象的,因此自动单元测试收集器不会尝试运行它。

在该课程中,将此代码添加到setUp():

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

checkIsDeployed必须是静态的。

答案 2 :(得分:1)

另一种选择是使用JBoss Server Ant Tasks

这些任务的好处是它们会阻塞,直到JBoss完全启动,因此不需要轮询。如果JBoss无法在所需的超时时间启动,它们也将失败,并且如果由于某些错误而无法在JVM关闭时尝试关闭JBoss。我相信这些任务用于JBoss测试套件。

我也听说过关于货物的好消息。它的好处是你的构建脚本不是JBoss特有的。据我所知,我认为JBoss Cargo插件是由一些JBoss人员维护的。

答案 3 :(得分:0)

您可以考虑使用hudson构建引擎:https://hudson.dev.java.net/来帮助您在特定时间触发事件。

我知道hudson可用于运行单元测试,并且可以通过调用ant来实现自动部署。

卡尔