目录

1、为什么会有jacoco?

2、jacoco配置

3、ide中的配置

4、使用步骤

5、jacoco原理

6、jacoco的坑

7、总结


距离上篇文章挺久的了,天天的也不知道在干嘛,时间就溜过去了。今天聊聊前段时间整理的jacoco。Jacoco是一个针对java语言开源的代码覆盖率工具。

1、为什么会有jacoco?

Jacoco是代码覆盖率工具,工具解决的问题就是代码覆盖率问题,为什么要查看代码的覆盖率?

或者说有了代码覆盖率能做什么?主要有以下几个方面:

  1. 可以查看代码的分支执行情况,可以查看代码是否存在因为bug 而产生分支不执行的问题。

  2. 可以查看垃圾代码,清理无用代码。

  3. 提升代码质量,覆盖率的代码基本上质量不会好,可能因为设计的原因,造成代码过于松散,可以看下是否有重构的必要性。

2、jacoco配置

市面上 Java常用覆盖率工具的工具有Jacoco、Emma和Cobertura。

今天专门聊下jacoco。感觉像奶茶。哈哈,注意下面这是今天的正题哦。

  • 2.1 jacoco 下载。

    有两种方式:直接下载jar包或者通过maven仓库。

    通过下面的官方网址:https://www.jacoco.org/jacoco/

    下载解压后:

  • 2.2 jacoco配置

    jacoco可以有两种生效模式:On-The-Fly代理模式  和 Offine模式

    这里只说fly模式,这种模式是基于javaagent,使用方便简单。在启动脚本中加入如下代码:

    -javaagent:D:\wechat\jacoco-0.8.5\lib\jacocoagent.jar=output=tcpserver,address=*,port=8888

    然后启动应用就可以进行代码覆盖率统计,这种模式是CS结构,应用是server,监听在8888 端口。

  • 2.3 jacoco的导出。

    既然生成了数据,就要导出,怎么导出呐?先切换到lib目录,然后使用下面的命令:

    java -jar jacococli.jar dump --address 127.0.0.1 --port 8888 --destfile /dump.exec

这样将导出生成exec的统计文件。

  • 2.4 生成我们看的懂的数据——html或者csv。

    因为exec文件我们没办法直接查看,因此需要生成report。report的命令我就不演示了,因为不重要,等下我会介绍一个效率更高的方式。命令如下:

  • java -jar jacococli.jar report [<execfiles> ...] --classfiles <path> [--csv <file>] [--encoding <charset>] [--help] [--html <dir>] [--name <name>] [--quiet] [--sourcefiles <path>] [--tabwith <n>] [--xml <file>]

    生成的html格式的报告如下:

    点开可以看具体的代码执行:

  • 2.5 覆盖率分析

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

    • 红色:无覆盖,没有分支被执行

    • 黄色:部分覆盖,部分分支被执行。

    • 绿色:全覆盖,所有分支被执行。

3、ide中的配置

  • 3.1 dump 和 report的官方代码。

    在内网环境的覆盖率统计,因为经常会拉下来看一下,总是使用命令这种方式比较低下。

    官方提供了代码实现 。

    ExecDump.java 对应 dump命令,生成exec文件。

    ReportGenerator.java 对应 report命令,生成html。

  • 3.2 生成的exec文件使用idea 进行解析。

show code coverage data  显示覆盖率数据,这个命令可以解析exec文件,并且将解析的覆盖率数据显示在项目的代码上。如果不想显示可以使用hide coverage,隐藏覆盖率数据。

generate coverage data 导出数据到html。

4、使用步骤

到这一步讲完了基本的使用步骤。下面讲一下在工作中的使用步骤Jacoco的使用分为三部分:

第一部分是注入并采集。使用javaagent启动。

第二部分是导出。使用批处理命令或者使用官方提供的代码ExecDump.java 导出exec到本地。

第三部分是生成报告,可以用批处理命令或者使用官方的代码ReportGenerator.java,或者使用idea 内置的工具。

如果只是在本地进行代码覆盖率统计,直接可以使用IDE的统计。

截取了idea 应用启动的时候的参数,可以看出idea同样是注入agent进行采集。

"C:\Program Files\Java\jdk1.8.0_121\bin\java.exe" -javaagent:C:\Users\Administrator\.IntelliJIdea2019.3\system\testAgent\intellij-coverage-agent-1.0.508.jar=C:\Users\Administrator\AppData\Local\Temp\coverage2args

停止应用的时候,idea会自动显示代码覆盖率。

5、jacoco原理

覆盖率的粒度从细到粗分为:指令、分支、方法、类级别。采集粒度越细,代码覆盖率结果越准确,有利有弊。同时性能损耗也越大。jacoco的实现原理就是在jvm 加载的时候进行指令注入,在相关采集点注入代码,进行统计。

6、jacoco的坑

我们在使用jacoco对内网服务器进行代码覆盖率的时候,因为内网出了问题,想要热更新代码解决一个小bug,但是却屡次失败,后来想到是因为jacoco对代码进行了注入,在热更新的时候,又要拿新的class 进行更新,注入的代码和编译出来未注入的代码差异过大,因此失败,所以在启动jacoco的时候即使在debug模式,也不能热更新。

7、总结

代码覆盖率只是一种监测工具,并不能简单的用代码覆盖率来说明代码质量的高低。提供一种参考。

每日一句

少年已成人,忘却了诗人和牧笛,心中偶尔渴望原野,只是当年的风不再。

公众号有资源可以提取。需要的自取,不定时更新,如果你需要什么,可以留言给我,我也会放上去。

jacoco不是奶茶,却像奶茶一样美味,不尝一下吗?相关推荐

  1. 奶茶新手加盟奶茶品牌培训哪些技能?

    很多人都看好奶茶店的创业前景,不仅可以自己做老板,还能快速的积累财富.但是很多人都是首次创业,经验欠缺,不知道怎么核算资金成本,不知道怎么才能获取更大的利润,最难的是没有制作奶茶的专业技术.这个时候选 ...

  2. 自由自在珍珠奶茶以市场细分来创新品牌

    奶茶从上世纪九十年代在中国大陆风靡,大大小小的品牌竞争也使得奶茶市场出现鱼龙混杂的局面,在重新洗牌的过程中,很多小品牌在竞争中被一一踢出局.在这种形势下,自由自在珍珠奶茶却异军突起,迅速抢占市场,成为 ...

  3. dorado 7 怎么样_一点点奶茶怎么样?消费者眼中的网红奶茶

    最近在朋友圈, -款奶茶火速蹿红,不错,那正是近期疯传的网红奶茶一点点奶茶. 一点点奶茶是-款主打台湾正宗波霸奶茶的茶饮品牌,而这样的奶茶在现在的市场中就表现的十分有潜力, 尤其受年轻群体的喜欢!一点 ...

  4. python是哪个国家的品牌,爬取全国12个热门城市奶茶店铺情况,看看你的城市哪个品牌最多...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于CSDN ,作者Gordon,Alice Python 数据分析实战讲解案例 htt ...

  5. 奶茶店一天盈利有多少?广州哪里有专业奶茶培训点

    很多人都知道奶茶行业利润很高,但是又不了解具体的数字.想拥有一个属于自家的奶茶店的你一定很关心奶茶店的成本和收益,比如:奶茶店一天的盈利有多少,广州哪里有专业奶茶培训点?下面跟随埃德珈一起来看看. 现 ...

  6. 芝诺数解|「六」享受生活,品味甘甜——重庆奶茶

    你的奶茶来了 Thanks~~ 重庆奶茶数据分析报告 F O R E W O R D 前言 人类对甜食的偏好是DNA决定的,它能使我们的身体分泌更多的多巴胺,让我们体会到"愉悦"! ...

  7. 叹20年奶茶江湖纷争,入局奶茶行业仍有机会

    消 费 品 牌 "以更有趣的方式洞察品牌" 编者按:这是奶茶系列研究的第三篇,三篇都是一边喝奶茶一边写奶茶,第一篇通过奈雪的茶上市招股说明书对比了"奈雪的茶"和 ...

  8. 开奶茶店,哪里学奶茶的制作配方?

    奶茶目前在国内的饮品市场上可谓是独占鳌头,由于其口味香浓,外表时尚,所以深受广大青年人.小孩们的喜爱. 随着社会的不断快速发展,越来越多的人开起了奶茶店创业,然而每天开奶茶店的人都在不断增加,那么,有 ...

  9. 奶茶MM:爱上一个大叔,是野马遇上一片草原。

    八卦的码农小码哥惊闻有网友爆料,京东创始人兼CEO刘强东已与奶茶妹妹章泽天在朝阳区民政局领证结婚.京东高级副总裁徐雷也在今日下午微博中晒出京东CEO与章泽天(奶茶妹妹)结婚证,证实两人已领证结婚. 对 ...

  10. 青年不愿老去,“养生+奶茶”却撑不起这份骄傲倔强

    当代年轻人,对于养生似乎有自己的一套方法. 吃火锅会上火,在凉茶里涮一下: 聚餐不能喝酒,泡点枸杞配点菊花当做喝花茶: 熬夜会有黑眼圈,于是一边敷着眼膜一边熬夜... 新时代的年轻人,将"朋 ...

最新文章

  1. iOS 静态库代码混淆方案
  2. BZOJ-1406-密码箱-AHOI2007-数学
  3. jenkins api_接触Jenkins(Hudson)API,第1部分
  4. PS教程第四课:PS新建文档和像素
  5. python基础——面向对象的程序设计
  6. 以企业面试讲解sql语句
  7. python点击屏幕_Python屏幕操作
  8. 大数据平台构建常见问题
  9. 鸿蒙2.0手机交互体验,鸿蒙 2.0手机应用开发者Beta,来了!全新交互体验
  10. php foreach 不等于_PHP性能优化小技巧
  11. 计算机自己创作游戏,说说自己做的数据库:我不爱玩电脑游戏,自己做数据库自己欣赏...
  12. Excel妙用-公式结果我都要
  13. 实时调度论文中经常出现的术语 ties broken arbitrary的意思
  14. 计算机读不出来u盘装系统,重装系统后电脑u盘读不出来
  15. 今天简单地把vw/vh总结一下
  16. ie显示服务器拒接链接,IE浏览器拒接访问是怎么回事 IE浏览器显示拒接访问的有效解决方法...
  17. 中国科学院计算机在职博士,2019中国科学院大学人工智能学院非全日制经验分享...
  18. maven基础:mvn命令常用参数整理;如:-am构建指定模块,同时构建指定模块依赖的其他模块
  19. CiteSpace分析文献(二)
  20. 华为服务器上传文件,服务器上传文件的方式

热门文章

  1. MATLAB/ArcGIS读取nc数据并进行可视化
  2. touchGFX综合学习五、touchGFX加载外部(SDCARD、SPI FLASH等)字体显示,包括中文
  3. Mac电池越来越不给力?教你检查电池健康度
  4. 业务流程图、数据流程图、功能流程图、页面流程图
  5. MySQL主外键设置
  6. 手机互联网的一点看法
  7. 【c++入门(2)】贪心训练
  8. 黏土基纳米复合水凝胶/PVA/PAA/BC复合水凝胶/聚乙烯醇PVA基复合水凝胶/壳聚糖/液晶(CS/LC)复合水凝胶/PVA/季铵盐壳聚糖复合水凝胶/有机-无机纳米复合水凝胶定制
  9. 如何在HTML文档中显示空格
  10. 云服务器端口管理修改,云服务器端口管理修改