java代码覆盖度之jacoco

目的

a. 度量单元测试覆盖率;

b. 度量自动化测试(接口、UI)覆盖率;

c. 度量功能测试覆盖率;

代码覆盖率是衡量测试质量的一个重要指标。

Jacoco简介

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

JaCoCo可以集成sonar、Jenkins等。

Jacoco安装

需要安装的工具与版本

安装的工具及版本

➢ Jacoco官网下载地址 https://www.eclemma.org/jacoco/

➢ Ant官网下载地址 https://ant.apache.org/bindownload.cgi

注:Ant需要配置环境变量;

使用java agent方式启动项目

1) Spring Boot项目

nohup java -javaagent:/disk1/jacoco-0.8.3/lib/jacocoagent.jar=includes=*,output=tcpserver,port=9006,address=*  -jar autoshell-0.0.1-SNAPSHOT.jar&

2) Tomcat部署项目

java -javaagent:/disk1/jacoco-0.8.3/lib/jacocoagent.jar=includes=*,output=tcpserver,port=9006,address=*  -jar autoshell-0.0.1-SNAPSHOT.jar&

将以上内容放到tomcat>bin>catalina.bat(linux环境为catalina.sh),配置前需要停止服务。

java agent启动说明

➢ 以-javaagent开头的,注意这中间不能有空格,否则会启动失败,后面跟着的是jacoco的安装路径中的jacocoagent.jar包的路径,

➢ includes配置包含在执行分析中的类名列表,我分析全部,因此使用*通配符。可以只分析一个包下的代码,也可以使用excludes排除不想要的包。

➢ output指的是用于写入覆盖数据的输出方法,使用tcpserver代理侦听由address和port属性指定的TCP端口,并将执行的数据写入此TCP连接,从而实现不停止项目运行实时生成代码覆盖率报告。

➢ port为端口号,需要明确的一点就是这个端口号不是项目的yml配置文件中配置的server.port端口号,不要搞混淆了,选择一个未被占用的即可。address配置连接的ip地址,可以简单理解为之前安装ant的机器的ip地址。*号则表示此代理接受任何本地的连接,也就是说同一局域网下都可以。

➢ 其他属性配置请参照官方文档:https://www.eclemma.org/jacoco/trunk/doc/agent.html

注意:在tcpserver和 tcpclient模式下打开的端口和连接以及JMX接口不提供任何身份验证机制。如果在生产环境上运行jacoco,请确保没有不受信任的源可以访问TCP服务器端口,或者jacoco TCP客户端仅连接到受信任的目标。否则可能会泄露应用程序的内部信息或者可能发生DOS攻击。

上传源码到服务器

将源码与编译后的文件上传到项目服务器,若源码变更需要同步更新。

ant build.xml配置

ant buil.xml配置

覆盖度报告收集

1) 进入ant  build.xml目录,执行ant dump

访问目标服务,并生成.exec文件;

ant dump

2) 进入ant build.xml目录,执行ant report;

根据dump后,生成的.exec文件,生成最终的html覆盖率报告

ant report

3) 查看覆盖度报告

生成报告文件
代码覆盖度报告

➢Elment对应jacocoant.xml文件中配置的group name属性,也就是我项目中的一个子项目,点进去可以看到所有的包,再点击包可以看到里面的类文件,点击类进入到方法列表,方法还可以点,点了会直接进入到代码当中,代码会有颜色并高亮显示,分支代码的左边还会有一颗带颜色的钻石

➢Jacoco包含了多种尺度的覆盖率计数器,包含指令级(Instructions,C0 coverage),分支(Branches,C1 coverage)、圈复杂度(CyclomaticComplexity)、行(Lines)、方法(Non-abstract

Methods)、类(Classes)。

1. Instructions

Jacoco计算的最小单位就是字节码指令。指令覆盖率表明了在所有的指令中,哪些被指令过以及哪些没有被执行。这项指数完全独立于源码格式并且在任何情况下有效,不需要类文件的调试信息。

2. Branches

Jacoco对所有的if和switch指令计算了分支覆盖率。这项指标会统计所有的分支数量,并同时支出哪些分支被执行,哪些分支没有被执行。这项指标也在任何情况都有效。异常处理不考虑在分支范围内。在有调试信息的情况下,分支点可以被映射到源码中的每一行,并且被高亮表示。

红色钻石:无覆盖,没有分支被执行。黄色钻石:部分覆盖,部分分支被执行。绿色钻石:全覆盖,所有分支被执行。

Cyclomatic Complexity

Jacoco为每个非抽象方法计算圈复杂度,并也会计算每个类,包,组的复杂度。根据McCabe1996的定义,圈复杂度可以理解为覆盖所有的可能情况最少使用的测试用例数。这项参数也在任何情况下有效。

Lines该项指数在有调试信息的情况下计算。因为每一行代码可能会产生若干条字节码指令,所以我们用三种不同状态表示行覆盖率

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

Methods每一个非抽象方法都至少有一条指令。若一个方法至少被执行了一条指令,就认为它被执行过。因为JaCoco直接对字节码进行操作,所以有些方法没有在源码显示(比如某些构造方法和由编译器自动生成的方法)也会被计入在内。

Classes每个类中只要有一个方法被执行,这个类就被认定为被执行。同5一样,有些没有在源码声明的方法被执行,也认定该类被执行。

参考地址://www.greatytc.com/p/4c728b39185e

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,082评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,231评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,047评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,977评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,893评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,976评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,605评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,888评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,906评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,732评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,513评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,980评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,132评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,447评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,027评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,232评论 2 339