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使用方法:
- Apache Ant方式:https://www.eclemma.org/jacoco/trunk/doc/ant.html
- 命令行方式:https://www.eclemma.org/jacoco/trunk/doc/agent.html
- Apache Maven方式:https://www.eclemma.org/jacoco/trunk/doc/maven.html
- Eclipse plugin方式:http://www.eclemma.org/
- 与Jenkins 集成:https://wiki.jenkins.io/display/JENKINS/JaCoCo+Plugin
4. JaCoCo和Jenkins相结合:
- 安装Jenkins插件
- 下载JaCoCo压缩包 https://www.eclemma.org/jacoco/
- 使用Java Agent https://www.jacoco.org/jacoco/trunk/doc/agent.html
- 启动服务脚本配置 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 &
- 运行测试用例 手动或者自动点击都会记录到代码覆盖率中
- Jenkins配置copy开发源代码 从build job copy源代码
- 生成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
- Jenkins配置report 同单元测试配置一样
5. 覆盖率报告:
进入源代码,就可以看见自动化测试的行覆盖率:
- 红色钻石:无覆盖,没有分支被执行
- 黄色钻石:部分覆盖,部分分支被执行。
- 绿色钻石:全覆盖,所有分支被执行。
开发:可以查看测试人员自动化测试是否覆盖代码,是否需要增加自动化用例
测试:可以发现是否增加自动化用例,开发的代码是否无法覆盖,属于多余代码