JaCoCo + Ant测试代码覆盖率

一、JaCoCo简述

JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等。

很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等。

JaCoCo包含了多种尺度的覆盖率计数器,包含指令级覆盖(Instructions,C0coverage),分支(Branches,C1coverage)、圈复杂度(CyclomaticComplexity)、行覆盖(Lines)、方法覆盖(non-abstract methods)、类覆盖(classes)

二、JaCoCo基本概念

jacoco支持多种覆盖率的统计,包括:

  1. 行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
  2. 类覆盖率:度量计算class类文件是否被执行。
  3. 分支覆盖率:度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量。
  4. 方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。
  5. 指令覆盖:计数单元是单个java二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全 独立源码格式。
  6. 圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块

三、JaCoCo使用方式

3.1 Apache Ant方式

参见 http://eclemma.org/jacoco/trunk/doc/ant.html

3.2 命令行方式

参见 http://www.eclemma.org/jacoco/trunk/doc/agent.html

大概的命令:

 -javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]

其他参数可以查看上面的链接

接口测试时,我们也是使用该方式来进行,具体的说明会在下面另外说明

3.3 Apache Maven方式

参见 http://www.eclemma.org/jacoco/trunk/doc/maven.html

这种方式适合Maven的项目。

3.4 Eclipse EclDmma Plugin方式

参见 http://www.eclemma.org/

该方式主要和eclipse集成,用户可以直观的看到覆盖率的情况

四、接口测试代码覆盖率

接口测试的入口是人工调用相关接口或者做相关动作产生的。jacoco agent监测测试活动,手动dump出来之后生成exec文件,最终生成覆盖率的报告。

其中,需要配置的地方有两个:

  • server端---即测试服务器
  • client端—即需要分析exec文件的地方,比如本地或者jenkins

4.1 server端--安装jacoco

1.https://www.jacoco.org/jacoco/ 下载下来,随意放在一个目录,解压即可。

180服务器上已经安装了jacoco,放在/home/hik/jacoco目录

2.因为我们服务是通过k8s容器部署的,要想容器内能访问到jacocoagent.jar,设置了一个NFS存储配置如图:

NFS配置

3.声明挂载:

挂载

4.使用:

使用

4.2 server端–启动参数配置

1.JAVA_OPTS参数加上:
-javaagent:/home/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8030,address=0.0.0.0

# -javaagent: 的后面跟jacoco的安装路径
# includes= 选项,选择你要覆盖率的服务
# port= 选项,选择你要打开的端口,和服务端口要不一样,即是一个其他人未占用的端口
# address= 选项,服务所在机器的ip地址(容器里面填写0.0.0.0)

2.重启服务即可。这样server端已经启动了一个jacoco agent对服务进行监控

4.3 client端 – 本地安装ant

从http://ant.apache.org 上下载ant,解压

4.4 client端 – 本地配置build.xml

防踩坑提醒:build.xml文件中的jacoco版本和sever端配置的jacoco版本最好一致(jacoco-0.8.5),否则可能会出现“Unable to dump coverage data”错误。

  1. client端也需要安装jacoco
  2. 编写build.xml文件,放在ant解压之后的/bin目录下:
    本地路径和端口需要根据实际情况修改


        
        
        
        
        
        
            
            
        
        
        
                
                
          
        
                
                
                
        
        
            
            
            
            
        
        
                
                
                        
                
        
        
            
            
                 
                
                    
                
                
                
                    
                    
                        
                            
                        
                        
                            
                        
                    
                    
                        
                            
                        
                        
                            
                        
                    
                    
                
                
                
            
        

4.5 本地执行ant任务

1.打开命令行,切换到ant安装路径/bin目录下

2.执行 ant report命令(根据build.xml配置,report命令包含了dump,merge,report命令,这些命令可以单独使用),生成报告

3.生成的报告在配置路径下,点击打开index.html:

绿色:执行过的代码
黄色:部分执行
红色:未执行

覆盖报告

4.6 其他说明

1.本地代码和server代码不一致时,报告无法展示

2.不同版本的报告(修改过代码)merge时无法保留之前的记录,会显示最新修改的文件,未修改文件的记录还在

3.build.xml文件比较灵活,理解之后可以自行配置,不一定完全对应上面的版本。参考:https://www.jacoco.org/jacoco/trunk/doc/ant.html

4.ant clean 命令可以删除掉文件

五、与Jenkins集成

待续。

参考:

https://www.jacoco.org/jacoco/
https://sq.163yun.com/blog/article/185102636718170112
https://blog.csdn.net/qq_26392615/article/details/82228972

你可能感兴趣的:(JaCoCo + Ant测试代码覆盖率)