6

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

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

验收测试需要通过调用各种方法来测试部署的代码并检查结果是否符合预期(*)。我们编写了一组额外的包来连接到现有系统,因此验收测试应该显示如何将这些包集成到现有代码库中。

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

综上所述,我目前的想法是使用 JUnit 来检查预期值等。我正在努力解决的问题是如何在部署后调用这些测试。“部署”是 Maven 的最后一个阶段,所以不确定这是否可能?

4

2 回答 2

6

仅仅因为该阶段被调用deploy并不意味着您必须使用它来部署您的应用程序进行测试。事实上,它应该只用于将工件“部署”到 maven 存储库。通读Maven 生命周期阶段的描述,您会发现有一些阶段专门用于您的用例:

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

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

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

于 2013-01-14T16:10:40.947 回答
5

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

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

第二个更适合詹金斯,因为你仍然会有一个项目。

于 2013-01-14T13:04:45.300 回答