JaCoCo 统计自动化测试代码覆盖率

1. 为什么要关注测试覆盖率:代码覆盖:

设计测试用例的时候我们会考虑程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行,这个时候我们的测试执行情况就需要一定的数据来衡量。
我们用代码覆盖率的结果来反向检查覆盖用例是否充分完整。

2. JaCoCo是什么:

java主要代码覆盖工具:EMMA、JaCoCo
JaCoCo是一个开源的覆盖率工具(官网地址: [https://www.jacoco.org/jacoco/trunk/doc/](https://www.jacoco.org/jacoco/trunk/doc/) ),它针对的开发语言是java。

Jacoco从多种角度对代码进行了分析:

  • 指令级覆盖 (Instructions,C0coverage):计数单元是单个java二进制代码指令,指令覆盖提供了代码是否被执行的信息,度量完全独立源码格式。
  • 分支(Branches,C1coverage):度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的分支数量。
  • 圈复杂度 (CyclomaticComplexity):在组合中,计算在一个方法里面所有可能路径最小数目,缺失的复杂度同样表示测试用例没有完全覆盖到这个模块。
  • 行覆盖 (Lines): 度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
  • 方法覆盖 (non-abstract methods):度量被测试程序的方法执行情况,是否执行取决于方法中是否至少有一个指令被执行

3. JaCoCo使用方法:

4. JaCoCo和Jenkins相结合:

  1. 安装Jenkins插件
  2. 下载JaCoCo压缩包 https://www.eclemma.org/jacoco/
  3. 使用Java Agent https://www.jacoco.org/jacoco/trunk/doc/agent.html
  4. 启动服务脚本配置 nohup java -javaagent:/alidata/server/jacoco/lib/jacocoagent.jar=output=tcpserver,address=xx.xx.xx.xx,port=6300 -jar /alidata/server/server-exec.jar --profile.active=xxx &
  5. 运行测试用例 手动或者自动点击都会记录到代码覆盖率中
  6. Jenkins配置copy开发源代码 从build job copy源代码
  7. 生成dump文件 从步骤3 server中生成:java -jar /alidata/server/jacoco/lib/jacococli.jar dump --address xx.xx.xx.xx --port 6300 --destfile /alidata/server/jacoco/dump.exec
  8. Jenkins配置report 同单元测试配置一样

5. 覆盖率报告:

进入源代码,就可以看见自动化测试的行覆盖率:

  • 红色钻石:无覆盖,没有分支被执行
  • 黄色钻石:部分覆盖,部分分支被执行。
  • 绿色钻石:全覆盖,所有分支被执行。

开发:可以查看测试人员自动化测试是否覆盖代码,是否需要增加自动化用例
测试:可以发现是否增加自动化用例,开发的代码是否无法覆盖,属于多余代码
代码覆盖率截图

猜你喜欢

转载自blog.csdn.net/weixin_41407477/article/details/84992568