Jacoco:查找外部测试的代码覆盖率

try*_*arn 9 java code-coverage maven jenkins jacoco

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

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

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

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

代码覆盖工具如何工作(以原始语言)的理解是它加载类并根据已被命中的代码部分生成报告.因此,根据这种理解,我不需要访问测试代码.我只需要以某种方式插入的代码覆盖工具为我的应用程序罐子,每当这个罐子的任何代码被调用时,报告将被更新.我的理解是否正确?

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

sli*_*lim 11

您可以在服务器上运行代码,由JaCoCo代理在运行时进行检测,方法是将代理添加到Java命令行.例如,如果您的流程目前已启用:

java -jar myApp.jar
Run Code Online (Sandbox Code Playgroud)

你可以把它改成

java -jar myApp.jar -javaagent:/some/path/jacocoagent.jar
Run Code Online (Sandbox Code Playgroud)

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

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

java -jar jacococli.jar report jacoco.exec [options]
Run Code Online (Sandbox Code Playgroud)

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

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

如果有正当理由不能使用代理,作为最后的手段,您可以使用instrument命令将类文件静态转换为已检测的类文件jacocococli.有关此信息,请参阅JaCoCo的"离线检测"文档.

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

  • 你仍然在某处启动Java.例如,如果您在Tomcat中运行,请将代理添加到Tomcat启动脚本中的`java`命令. (2认同)