Jacoco,看起来就很好喝的样子。

一、Jacoco简介

1、Jacoco全称JavaCodeCoverage,

是一个开源的,统计JAVA覆盖率的工具。

Python项目是统计不了的

2、Jacoco采用on-the-fly的模式进行插桩,

部署环境时,jacoco会介入class文件的加载,插入探针。

插入成功后,jacoco会新起一个端口来开启tcp服务,同时提供api来连接这个服务,从而dump数据。

二、Jacoco下载

1、官网地址

https://www.jacoco.org/jacoco/index.html,

下载最新的jacoco-0.85.zip

2、解压zip包,得到我们想要的3个jar包。

三、Springboot代码完善

测试代码覆盖率,我们要先准备被测试的springboot代码。

修改上一章的内容,添加一个主函数和controller。

1、新增CalcController.java,

这样可以通过http的方式可以请求calc的方法

package com.tool.controller;import com.tool.Calc;
import com.tool.Impl.CalcImpl;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;@Controller
public class CalcController {@ResponseBody@RequestMapping("/hello")public Map<String,Object> showHelloWorld(){Map<String,Object> map = new HashMap<>();map.put("msg","HelloWorld");return map;}@ResponseBody@RequestMapping(value="/calc/add")public String calcadd(HttpServletRequest request) {int x = Integer.parseInt(request.getParameter("x"));int y = Integer.parseInt(request.getParameter("y"));Calc myc = new CalcImpl();return (myc.add(x,y)+"");}@ResponseBody@RequestMapping(value="/calc/sub")public String calcsub(HttpServletRequest request) {int x = Integer.parseInt(request.getParameter("x"));int y = Integer.parseInt(request.getParameter("y"));Calc myc = new CalcImpl();return (myc.sub(x,y)+"");}@ResponseBody@RequestMapping(value="/calc/abs")public String calcabs(HttpServletRequest request) {int x = Integer.parseInt(request.getParameter("x"));Calc myc = new CalcImpl();return (myc.abs(x)+"");}@ResponseBody@RequestMapping(value="/calc/func")public String calfunc(HttpServletRequest request) {int x = Integer.parseInt(request.getParameter("x"));Calc myc = new CalcImpl();return (myc.func(x)+"");}
}

2、新增主函数

HelloWorldMainApplication.java,

启动webstarter

package com.tool;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/**@SpringBootApplication来标注主程序,说明这是一个springboot应用*/
@SpringBootApplication
public class HelloWorldMainApplication {public static void main(String[] args) {// spring应用启动起来SpringApplication.run(HelloWorldMainApplication.class,args);}
}

3、maven打包test4.jar

这样我们的被测项目就准备好了。

四、Jacoco启动项目

官方提供了3种方案启动项目

(tcpclient方案看不懂、直接pass掉)。

1、第一种方案:文件的方式启动项目

它的好处是关闭服务可以直接生成res.exec,

坏处是必须要关闭服务才能生成。

java -javaagent:jacocoagent.jar=includes=com.*,output=file,destfile=d:/jacoco/filetest/result/res.exec,append=true -jar test4.jar

2、第二种方案:tcp的方式启动项目

它的好处是不用关闭服务,随时可以dump,

这也是最常用的启动方式

java -javaagent:jacocoagent.jar=includes=com.*,output=tcpserver,port=6300,address=localhost,append=true -jar test4.jar

执行dump语句生成res.exec

java -jar jacococli.jar dump --address localhost --port 6300 --destfile d:/jacoco/tcptest/result/tcp.exec

3、参数解释:

  • javaagent

jacocoagent.jar包的地址

  • includes
    对要插桩的包进行过滤,*代表所有的class都要进行插桩。
  • output

启动项目的两种方案,file或者tcpserver

  • port
    jacoco开启的tcpserver的端口,dump的时候也要执行相同端口
  • address
    jacoco对外开放的tcpserver的访问地址。
    地址为127.0.0.1的时候,只能在这台服务器上进行dump
    地址为实际ip时,可以在任意一台机器上进行数据的dump
  • destfile
    exec文件的生成目录
  • append
    默认为true,执行 dump时在原文件末尾进行追加
    如果改为false,执行 dump时会直接覆盖原文件

五、解析exec

1、ant解析

安装ant环境,建立build.xml,执行ant dump,再执行ant report。

ant解析的难点是建立build.xml,我尝试了下,成仁了,果断放弃。

请大家自行尝试。

2、开发工具解析

idea点击Analyze——Show CCD

点击+号,选择exec,show selected。

注意每次更新了覆盖率,都要重新点击+号,添加文件。

java -jar jacococli.jar report ./tcp.exec --classfiles D:workspace2springboot-04-testtargetclasses --sourcefiles D:workspace2springboot-04-testsrcmainjava --html report

5、解析出来的完整report:

每一行的覆盖率都会展示:

更多jacoco案例或者python相关知识请关注我的公主号:凡大哥随笔。

sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率相关推荐

  1. 代码覆盖率以及jacoco统计代码覆盖率的原理

    一.什么是代码覆盖率 简单来说,代码覆盖率是指,至少被执行了一次的条目数占整个条目数的百分比. 如果"条目数"是语句,对应的就是代码行覆盖率:如果"条目数"是函 ...

  2. Android ui 单元测试 覆盖率,Android单元测试/Ui测试+JaCoCo覆盖率统计

    Android单元测试/Ui测试+JaCoCo覆盖率统计 参考资料1 参考资料2 背景说明 单元测试 从源代码着手,对源码中的最小可测试单元进行检查和验证,在对源代码有较深的理解下,编写测试单元,工作 ...

  3. springboot多模块工程单元测试jacoco统计代码覆盖率总结

    jacoco统计代码覆盖率的文章一搜一大堆,方法也很简单,就是在pom中引用两个插件: maven-surefire-plugin jacoco-maven-plugin 其中jacoco-maven ...

  4. 排查jacoco覆盖率对反射问题的影响

    最近业务部门开始推行,在全部后台应用中自动开启覆盖率测试.然而,不久后就有业务测试的同学反馈出现问题. 问题的现象如下: 我们的业务通过 HTTP 调用腾讯OSS的服务,结果得到了以上的报错信息.测试 ...

  5. java jacoco覆盖率报错_接口测试代码覆盖率(jacoco)方案分享

    在做接口测试过程中,为了达到量化接口测试用例效果的目的,引入了代码覆盖率作为重要指标,在查阅相关文档和资料通过实践之后,大概得到了一个方案.如图: 备注:该方案略微复杂了一些,原因在于服务JVM所在的 ...

  6. Jacoco覆盖率工具使用

    Jacoco介绍 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第 ...

  7. java代码实现单元测试jacoco覆盖率收集生成多模块聚合报告

    文章目录 背景 一.准备工作 - 生成exec文件 二.准备工作 - 引入依赖 三.利用jenkins-jacoco插件源码收集覆盖率结果 四.生成jacoco报告文件,聚合多模块 附赠相关知识点 背 ...

  8. Jacoco覆盖率工具使用(已测试)

    笔者踩了很多坑,然后总结以下的研究结果.转载请注明出处,谢谢啦! 1两种方式 1.1 eclipse直接安装插件测试 install new soft 安装插件 eclemma java code c ...

  9. 基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

    首发于 Jenkins 中文社区 使用 JaCoCo 统计功能测试代码覆盖率? 对于 JaCoCo,有所了解但又不是很熟悉. "有所了解"指的是在 CI 实践中已经使用 JaCoC ...

最新文章

  1. python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法
  2. java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要...
  3. vba发送邮件 签名_如何更改“从Windows 10的邮件发送”签名
  4. 7.9 规划Varnish缓存
  5. “今夜酒店特价”的商业模式是什么?www.souapp.com搜应用推荐
  6. 【福利倒计时】春风十里不如程序猿的专属福利,拿了这份,2018值了~
  7. 百度、腾讯、滴滴,如何看2019智能网联汽车发展 | 2019互联网岳麓峰会...
  8. 未雨绸缪:面试前为何要带一份不一定被阅的简历?
  9. 计算机资料室英语翻译,资料英文怎么说_资料的英文怎么写 - 沪江英语
  10. 财务分析与决策——利润表
  11. Windows 10 虚拟桌面切换
  12. 【C#】 enum 还能这么玩
  13. python爬斗鱼直播_从零开始写Python爬虫 --- 爬虫应用: 利用斗鱼Api抓取弹幕
  14. [VB.NET]如何向数据库字段中写入文件?
  15. Oracle 状告 Google 侵犯专利
  16. Arduinojson官网反序列化示例教程
  17. Java 8 辣么大(lambda)表达式不慌之—–(四)示例-Collectors中的中的joining 方法和mapping方法
  18. c语言 bnf,c语言的bnf总结
  19. 天下武功,唯快不破 | OptiPlex 7070仅售3339元,戴尔小企业官网秒杀大战等你来参战!...
  20. python3+OpenCV批处理图片

热门文章

  1. 解决pip安装报错:is not a supported wheel on this platform
  2. 2019半年总结:Teams are powerful
  3. 各种注意力机制PyTorch实现
  4. CVPR2020:基于层次折叠的跳跃式注意网络点云完成
  5. Google Pixel 超分辨率--Super Resolution Zoom
  6. 同向逆向、多车道线检测
  7. 自动驾驶平台,阵营, 主要传感器与场景联系
  8. 2021年大数据ELK(五):Elasticsearch中的核心概念
  9. 2021年大数据Hive(四):Hive查询语法
  10. Android ViewAnimationUtils (动画) 的使用