JBoss 服务器上的 Cobertura 运行时覆盖率

Cobertura Runtime coverage on JBoss server

我正在探索如何在运行时为 Java Web 应用程序执行 Cobertura 代码覆盖,我偶然发现了一篇文章 http://www.mojohaus.org/cobertura-maven-plugin/instrumentingDeploymentArtifact.html

我遵循了这些步骤并能够在一个小型 Maven Web 应用程序上获得覆盖率报告,我在 JBoss 服务器上部署了一个 war 文件(包含单个模块)并手动浏览了已部署的应用程序。

现在,当我对一个更大的应用程序执行相同的过程和步骤时,我们需要在相同的设置上部署一个 ear 文件(包含多个模块的 war 文件),然后我手动点击应用程序服务但我无法获得任何报道。最初会创建一个空的 cobertura.ser 文件,但不会更新。

如果 ear/war 或任何其他需要在 JBoss 服务器中配置的问题,请告诉我。

提前致谢

Cobertura 的一个已知条件是它在 JVM 关闭期间写入代码覆盖率,即它注册一个关闭挂钩,并在那时将信息转储到文件中。 问题是 JBoss 通常会在大多数关闭挂钩可以执行之前停止 JVM,这会影响 Cobertura。 请参阅此常见问题解答:I'm using JBoss. When I stop the server, the coverage data file is not written.

常见问题解答建议使用

  -Djboss.shutdown.forceHalt=false

现在,另一个常见的解决方案是将 CoberturaFlush.war(分发的一部分)合并到您的 EAR 中,并调用一个特殊的 url,这将使 Cobertura 运行时将其数据转储到文件中.您希望在关闭 server/application 之前调用 url,通常是 http://HOST:PORT/coberturaFlush/flushCobertura

最后一件事:默认情况下,数据文件将在工作目录中生成,因此明确强制文件路径名通常更安全:

 -Dnet.sourceforge.cobertura.datafile=[absolute file path]

在您的情况下,必须将其添加到 JBoss 启动参数(例如 run.conf)