首页 > 解决方案 > Jacoco:查找外部测试的代码覆盖率

问题描述

我最近在 eclipse 中使用 EclEmma 插件来查找我的应用程序中 JUnits 的代码覆盖率,它工作得很好。

在下一步中,我希望能够找到从外部在我们的应用程序上调用的端到端测试/功能测试的代码覆盖率(它们驻留在单独的服务器上)。

基本上,我们将应用程序打包为 jar(我们使用 maven)并将其部署在服务器上。我们可以在这个位置触发功能测试。

在这种情况下有没有办法找到代码覆盖率?

对代码覆盖工具如何工作的理解(以原始语言)是它加载类并根据已命中的代码部分生成报告。因此,根据这种理解,我不需要访问测试代码。我只需要以某种方式代码覆盖工具插入我的应用程序 jar 中,只要调用此 jar 中的任何代码,就会更新报告。我的理解正确吗?

注意:如果可以使用其他工具,我愿意使用其他代码覆盖工具。

标签: javamavenjenkinscode-coveragejacoco

解决方案


通过将代理添加到 Java 命令行,您可以在由 JaCoCo 代理在运行时检测的服务器上运行您的代码。例如,如果您的进程当前是通过以下方式启动的:

java -jar myApp.jar

您可以将其更改为

java -jar myApp.jar -javaagent:/some/path/jacocoagent.jar

默认情况下,这将jacoco.exec在 VM 终止时将覆盖数据写入文件,但您可以使用选项覆盖它,使您能够通过 TCP/IP 获取覆盖数据。请参阅JaCoCo 代理文档

您可以使用以下格式将其格式化为报告(例如 HTML):

java -jar jacococli.jar report jacoco.exec [options]

有关选项,请参阅JaCoCo CLI 文档

...或者您可以使用 EclEmma 来分析输出。

如果有真正的原因您不能使用代理,作为最后的手段,您可以instrument使用jacocococli. 有关这方面的信息,请参阅JaCoCo 'Offline Instrumentation' 文档

直接调用代理和使用jacococli.jar是JaCoCo最基本的使用方式。由于您使用的是 Maven,因此您可以使用 JaCoCo Maven 插件获得许多相同的效果。


推荐阅读