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

Ste*_*ers 6 deployment junit integration-testing acceptance-testing maven

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

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

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

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

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

cha*_*had 6

仅仅因为调用该阶段deploy并不意味着您必须使用它来部署应用程序进行测试.实际上,它应该仅用于将工件"部署"到maven存储库.阅读Maven生命周期阶段的描述,您将看到有一些专用于您的用例的阶段:

pre-integration-test
integration-test
post-integration-test  
Run Code Online (Sandbox Code Playgroud)

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

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


Mat*_*ell 5

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

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

第二个更适合 jenkins,因为您仍然只有一个项目。