代码覆盖率工具之Jacoco
JaCoCo(Java Code Coverage)是一款面向Java语言的开源代码覆盖率工具,以其小型化和轻量化著称。它能够提供代码在测试过程中的覆盖率信息,帮助开发人员和测试人员识别未测试的代码部分,从而提高代码质量和测试的完整性。JaCoCo
可以嵌入到Ant
、Maven
等构建工具中,也可以作为Eclipse
插件使用,或者通过JavaAgent
技术监控Java程序。
一、工作原理
JaCoCo通过对Java字节码进行插桩来收集覆盖率信息。插桩有两种主要方式:离线(offline)和在线(on-the-fly)。
- 离线模式:在编译时对代码进行插桩,生成插过桩的class或jar包。在测试这些插过桩的文件后,生成动态覆盖信息文件,最后统一处理这些覆盖信息并生成报告。
- 在线模式:在应用启动时加入JaCoCo agent进行插桩,实时地进行代码覆盖率分析。这种方式适用于开发和测试人员在使用应用期间进行覆盖率监测。
JaCoCo在执行测试用例时收集程序执行轨迹信息,并通过数据处理器结合程序执行轨迹信息和代码结构信息生成代码覆盖率报告。这些报告可以以html、xml等格式展示,便于开发人员和测试人员查看和分析。
二、在线模式
下载Jacoco:首先,您需要从官网下载Jacoco的最新版本。
可以从Jacoco的官方网站下载最新版本的Jacoco安装程序。
首先,解压缩已下载的JaCoCo安装程序:
unzip jacoco-0.8.12.zip
接下来,使用以下命令来启动应用程序并插桩:
java -javaagent:/opt/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=6333,address=localhost,append=true -jar /opt/IAM_JAVA/IAM/src/MyApp.jar
命令说明:
/opt/jacoco/lib/jacocoagent.jar
:JaCoCo代理JAR文件的安装目录。output=tcpserver
:表示以TCP服务器模式启动应用程序并进行插桩。port=6333
:JaCoCo TCP服务器的端口号(注意:原文中端口号为6333,但此处已更正为6300,以保持与命令中的端口号一致)。address=localhost
:TCP服务器的访问地址,可以配置为127.0.0.1或实际访问的IP地址。/opt/IAM_JAVA/IAM/src/MyApp.jar
:要运行的应用程序JAR文件。
在应用程序运行期间,使用以下命令生成覆盖率文件:
java -jar /opt/jacoco/lib/jacococli.jar dump --address localhost --port 6333 --destfile /opt/IAM_JAVA/IAM/jacoco.exec
最后,使用以下命令生成HTML格式的覆盖率报告:
java -jar /opt/jacoco/lib/jacococli.jar report /opt/IAM_JAVA/IAM/jacoco.exec --classfiles /opt/IAM_JAVA/IAM/src/bin --sourcefiles /opt/IAM_JAVA/IAM/src --html /opt/IAM_JAVA/IAM/report01
命令说明:
/opt/IAM_JAVA/IAM/jacoco.exec
:覆盖率文件。/opt/IAM_JAVA/IAM/src/bin
:包含编译后的类文件的目录。/opt/IAM_JAVA/IAM/src
:包含Java源文件的目录。/opt/IAM_JAVA/IAM/report01
:生成的HTML报告的输出路径。
完成上述步骤后,您可以访问生成的index.html文件来查看覆盖率报告。报告将展示应用程序的代码覆盖率情况,如图所示。