jacoco二开+code_diff代码覆盖率设计

2,054 阅读2分钟

这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战

单测的时候如何知道覆盖到了多少代码?jacoco就是个很不错的代码覆盖率统计框架。一起来学习一下吧。

我的学习顺序:
1、jacoco基本知识、底层原理和简单应用
2、如何获取增量代码
3、jacoco二开-支持增量代码覆盖率报告
4、super-jacoco:增量代码覆盖率平台化项目

上一篇已经讲了jacoco的基本知识和简单ant实践。这次说一下jacoco二开+code_diff(增量代码)。

【code_diff工程】

源码地址:gitee.com/Dray/code-d…

简述:获取增量代码。在单测的时候如果是对增量代码进行覆盖率检测,肯定是能更好的获得结果。所以通过对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二开工程】

源码地址:gitee.com/Dray/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文件的路径。