这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战
单测的时候如何知道覆盖到了多少代码?jacoco就是个很不错的代码覆盖率统计框架。一起来学习一下吧。
我的学习顺序:
1、jacoco基本知识、底层原理和简单应用
2、如何获取增量代码
3、jacoco二开-支持增量代码覆盖率报告
4、super-jacoco:增量代码覆盖率平台化项目
上一篇已经讲了jacoco的基本知识和简单ant实践。这次说一下jacoco二开+code_diff(增量代码)。
【code_diff工程】
简述:获取增量代码。在单测的时候如果是对增量代码进行覆盖率检测,肯定是能更好的获得结果。所以通过对jacoco二次开发以及增量代码获取的设计,就可以实现。
实践步骤:
1、修改application.yml和log4j2.yml
修改代码的账号密码、基础下载路径和日志路径。
##基于git
git:
userName: admin
password: 123456
local:
base:
dir: D:\git-test
##基于svn
svn:
userName: admin
password: 123456
local:
base:
dir: D:\svn-test
2、运行项目,访问http://127.0.0.1:8085/doc.html
获得增量代码数据。
结果示例:
[{"classFile":"com/qa/test/controller/TestController","lines":[{"endLineNum":75,"startLineNum":62,"type":"INSERT"}],"methodInfos":[{"methodName":"jacoco","parameters":"Long"}],"moduleName":"com-test-service-center","type":"MODIFY"}]
【jacoco二开工程】
简述:结合code_diff工程得到的增量代码数据,获取代码覆盖率。
底层原理:修改一下 jacoco执行
report的命令,加一个参数diffCode。
实践步骤:
1、下载jar包
这是由jacoco二开工程构建出来的新client包,支持增量代码新参数。
org.jacoco.cli-0.8.7-SNAPSHOT-nodeps.jar
可以替换掉jacoco-0.8.7文件中lib下的jacococli包,或者直接放在主目录下,自己知道放哪里就行,后面会用到路径。
2、启动被测试服务
用javaagent的启动方式,开启端口6500,ip为127.0.0.1。
3、生成.exec文件
dump
java -jar /Users/mac/org.jacoco.cli-0.8.7-SNAPSHOT-nodeps.jar dump --address 127.0.0.1 --port 6500 --destfile /Users/mac/re/diffnew/jacoco.exec
merge
java -jar /Users/mac/org.jacoco.cli-1.0.2-SNAPSHOT-nodeps.jar merge /Users/mac/re/diffnew/jacoco.exec --destfile /Users/mac/re/diffnew/merge.exec
4、执行report命令
java -jar /Users/mac/org.jacoco.cli-0.8.7-SNAPSHOT-nodeps.jar report /Users/mac/re/diffnew/jacoco.exec --classfiles /Users/mac/Documents/jacoco_project/test/com-test-service-center/target/classes --sourcefiles /Users/mac/jacoco_project/test/com-test-service-center/src/main/java --html /Users/mac/re/diff --diffCode="[{"classFile":"com/qa/test/controller/TestController","lines":[{"endLineNum":75,"startLineNum":62,"type":"INSERT"}],"methodInfos":[{"methodName":"jacoco","parameters":"Long"}],"moduleName":"com-test-service-center","type":"MODIFY"}]" --encoding=utf8
5、踩坑
--classfiles和--sourcefiles是被测试服务的目录,不是git下载代码的目录。
--diffCode 需要用引号括起来,里面的引号需要反斜杠。直接在终端输入就可以转换了。
report后面要跟着.exec文件的路径。