【问题标题】:How to run tests after deployment using Maven?使用 Maven 部署后如何运行测试?
【发布时间】:2023-04-01 08:57:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我不确定您是否真的需要在测试之前进行部署。对于集成测试,我们可以使用 DBUnit 并且数据库将可用。
  • 谢谢,但即使数据库是从使用 Hibernate 的类生成的,这是真的吗?我从来没有使用过 DBUnit(但在试图找到答案时在这里遇到过几次)所以需要调查一下。
  • 是的,这是真的;我目前使用它进行集成测试。
  • 这表明我缺乏知识,但我要添加的代码库使用“seam-managed Hibernate session”。这是通过调用 Component.getInstance("hibernateSession") 来实例化的。如果在部署之前进行此调用并出现“无应用程序上下文活动”错误,则此调用将失败。不知道为什么会这样 - 但即使它成功了,如果在应用程序服务器上部署之前完成,我对 Hibernate 引用的数据库如何/在何处存在感到困惑。
  • 不,我认为这很正常,因为您只是从测试开始。您必须在运行测试之前初始化应用程序上下文才能使这种方式起作用。例如您可以参考:stackoverflow.com/questions/10104372/…

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


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回复!我倾向于做这样的事情。一个缺点是我希望能够轻松地在 Eclipse 中运行/调试测试。我想这可以通过远程调试来实现,但要冗长得多。
【解决方案2】:

仅仅因为该阶段称为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 运行。您可以拥有一个仅运行集成测试的构建作业,并仅在成功时触发另一个“部署”作业。

【讨论】:

  • 您好,感谢您的回复 - 可以以特别的方式使用这些阶段。但是这里有一些非常基本的东西我不明白。我编写 Java 代码,将其打包成 WAR 文件,然后将其部署到应用程序服务器 (Glassfish)。它是数据库所在的应用程序服务器(并从 Hibernate 更新),所以我如何能够在部署之前测试与数据库等的通信?数据库肯定不存在吗?这是容器的用武之地吗?它们是否以某种方式模拟了一个应用程序服务器而不需要完全部署?
  • GlassFish 是 Cargo 支持的容器。它支持部署到现有的外部容器,或启动和拆除的临时容器,仅用于测试目的。我想我要说的是 Cargo 是为您的用例制造的高质量产品。我会检查一下;)
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2022-08-18
  • 2015-09-19
  • 2023-03-18
相关资源
最近更新 更多