Springboot通过Jacoco生成测试用例覆盖率报告

环境搭建

主要讲述,jacoco针对于jar服务,统计代码覆盖率并生成报告!

准备项目jar包
自己找一个打包好的jar服务,或者从github上down一个Springboot demo项目,自行打包成jar包。
说明:下载后将项目打包成jar。(此处通过idea打开项目,下载依赖,然后执行maven 的install即可)。

       2. 下载jacoco相关jar包,地址:https://www.jacoco.org/jacoco/index.html

           

此处将demo项目下载后并把jacoco相关jar放到项目目录下:


       3. 启动demo服务

在项目目录下执行如下命令:
        java -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=9100,address=127.0.0.1 -jar target/jacoco-test-1.0-SNAPSHOT.jar 

           1. -javaagent :
                jdk5之后新增的参数,主要用来在运行jar包的时候,以一种方式介入字节码加载过程,如有兴趣自行百度。注意后面有个冒号: 

           2. includes=*

              这个代表了,启动时需要进行字节码插桩的包过滤,*代表所有的class文件加载都需要进行插桩。假如你们公司内部代码都有相同的包前缀:com.beebank
              你可以写成:   includes=com.beebank.*

           3.output=tcpserver

              这个地方不用改动,代表以tcpserver方式启动应用并进行插桩。

           4.port=9100

              这是jacoco开启的tcpserver的端口,请注意这个端口不能被占用。

           5.address=127.0.0.1

              这是对外开发的tcpserver的访问地址。可以配置127.0.0.1,也可以配置为实际访问ip

              配置为127.0.0.1的时候,dump数据只能在这台服务器上进行dump,就不能通过远程方式dump数据。

              配置为实际的ip地址的时候,就可以在任意一台机器上(前提是ip要通,不通都白瞎),通过ant xml或者api方式dump数据。

        

如图:没有报错就是启动成功

              

      4. 通过jacococli.jar导出覆盖率记录的exec文件

 java -jar jacococli.jar dump --address 127.0.0.1 --port 9100 --destfile ./jacoco.exec --reset
注意⚠️:执行 java -jar jacococli.jar dump --address 127.0.0.1 --port 9100 --destfile ./jacoco.exec --reset  命令需要再重新打开一个终端窗口运行。
          

       5. 通过jacococli.jar生成覆盖率报告

Java -jar jacococli.jar report ./jacoco.exec --classfiles target/classes --sourcefiles src/main/java --encoding utf-8 --html jacoReport

       6. 到项目的根目录查看是否生成jacoReport目录,点击index.html右键浏览器打开,查看报告是否正确生成

           

       

      7.index.html报告

         

      8. index.html 报告字段详解

Element:元素。最外层展示分组名称,依次为包-->类-->方法
Missed Instructions Cov:指令覆盖,字节码中指令。
1.方法里所有的代码行都有覆盖到(都覆盖了不代表100%覆盖,会存在分支没有覆盖 完整的情况)。
2.类下面所有的方法都有覆盖到。
3.包下面所有的类都有覆盖到。
Missed Branches Cov:分支覆盖率。
 1.对所有的if和switch指令计算了分支覆盖率。
 2.用钻石表示,分支覆盖率不能看行。
 
Missed Cxty:圈复杂度。
 1.jacoco 为每个非抽象方法计算圈复杂度,也会计算每个类、包、组的复杂度。根据McCabe 1996的定义,圈复杂度可理解为覆盖所有的可能情况最少使用的测试用例数。
 2.V(G) = 区域数=判定节数点+1,while、if、for 、swifth  每个都是一个判定节点,嵌套的都是加 1。
 
Missed Lines:代码行。用背景色标识的都算是行统计的目标,变量定义不算行,else也不算。
 
Missed Methods:方法。每个非抽象方法都至少有一条指令,若一个方法至少被执行了一次指令,就认为它被执行过。
 
Missed Classes:类。每个类中只要有一个方法被执行过,这个类就认为被执行过,同Missed Methods一样,有些没有在源码声明的方法被执行,也认为该类被执行。
 
      9.覆盖率标识

红钻:表示未覆盖。

黄钻:表示部分覆盖。

绿钻:表示全部覆盖。

注:条件覆盖都是用钻表示。

     10 .Lines覆盖

红色背景:无覆盖,该行的所有指令均无执行。
黄色背景:部分覆盖,该行部分指令被执行。

绿色背景:全覆盖,该行所有指令被执行。


————————————————
版权声明:本文为CSDN博主「cf_崔先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37599783/article/details/107211913​​​​​​​

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值