java - Jacoco:查找外部测试的代码覆盖率
问题描述
我最近在 eclipse 中使用 EclEmma 插件来查找我的应用程序中 JUnits 的代码覆盖率,它工作得很好。
在下一步中,我希望能够找到从外部在我们的应用程序上调用的端到端测试/功能测试的代码覆盖率(它们驻留在单独的服务器上)。
基本上,我们将应用程序打包为 jar(我们使用 maven)并将其部署在服务器上。我们可以在这个位置触发功能测试。
在这种情况下有没有办法找到代码覆盖率?
我对代码覆盖工具如何工作的理解(以原始语言)是它加载类并根据已命中的代码部分生成报告。因此,根据这种理解,我不需要访问测试代码。我只需要以某种方式将代码覆盖工具插入我的应用程序 jar 中,只要调用此 jar 中的任何代码,就会更新报告。我的理解正确吗?
注意:如果可以使用其他工具,我愿意使用其他代码覆盖工具。
解决方案
通过将代理添加到 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 插件获得许多相同的效果。
推荐阅读
- python - Python Selenium - 调整 pause_time 以在无限页面中向下滚动
- node.js - MongoDB 和 API 集成 - 如果不存在则创建新用户
- android - (Android) 主题更改为 Material.light 时出现渲染错误
- python - 如何在使用 GitHub API 时使用基本身份验证来创建 OAuth 令牌
- ios - 有没有办法让 Apple App Store 验证框架?
- python - 从网站返回 JSON 数据的 Python 函数
- python - 使用双循环创建 DataFrame
- angular - Angular 6 - 共享模块中的自定义管道未导出
- angular - Angular 6:将数据添加到另一个组件后更新一个组件中的表
- tensorflow - “Tensorflow GPU”版本和 MX150 2GB GPU