如何使用Maven部署后运行测试?

时间:2013-01-14 12:29:04

标签: maven deployment junit integration-testing acceptance-testing

我正在尝试决定如何为Java-EE Web应用程序创建一组验收测试。

这是设置:Maven用于生成WAR文件并将其部署到Glassfish中。在部署时,使用Hibernate(“hbm2ddl = auto”选项)从模型类自动更新MySQL数据库模式。

验收测试需要通过调用各种方法来测试部署的代码,并按预期检查结果(*)。我们编写了一组附加程序包以挂钩到现有系统中,因此Acceptance Tests应该显示如何将这些程序集集成到现有代码库中。

(*)这听起来更像是单元/集成测试,但它们是验收测试,因为它们应该证明我们所做的工作,并且需要在部署后运行,因此有一个数据库。

从上面可以看出,我目前的想法是使用JUnit来检查期望值等。我正在努力解决的问题是如何在部署之后调用这些测试。 “部署”是Maven的最后阶段,所以不确定这是否可行?

2 个答案:

答案 0 :(得分:6)

仅仅因为调用该阶段deploy并不意味着您必须使用它来部署应用程序进行测试。实际上,它应该仅用于将工件“部署”到maven存储库。仔细阅读Maven lifecycle phases的说明,您会发现有一些专用于您的用例的阶段:

pre-integration-test
integration-test
post-integration-test  

查看Cargo Maven plugin。它是将WAR文件部署到各种容器以进行测试的。他们肯定会显示您在网站上描述的用例的演示。我希望最终,您可以使用Cargo部署到您的容器(从早期集成测试之前的一个阶段)

注意,Jenkins还有一个插件,它是Cargo插件的包装器。所以你可以通过Jenkins做你需要的。另请注意,您不需要将您的Jenkins构建作业作为mvn clean deploy运行。您可以拥有一个仅运行集成测试的构建作业,并仅在成功时触发另一个“部署”作业。

答案 1 :(得分:4)

如果你真的需要在部署之后做一些事情,那么你可以运行故障保护,并通过暗示JUnit)作为部署阶段的一部分。

我通常做什么,如果要有单独的模块。因此,您可以拥有一个maven项目,其中包含您的项目和单独的“部署测试”项目。然后,构建父项目将构建并运行您的战争,然后运行部署测试。您可以正常使用junit。

第二个更适合jenkins,因为你还有一个项目。