增量覆盖率报表实现

最近从QA那里接收到了一个需求,是对修改过的代码生成一个类似于Jacoco 的测试覆盖率报表,所以在此记录一下生成的步骤:

  • 配置Jacoco

    在JVM option中添加: -javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]即可。option有很多,我们这里只介绍一下我们配置的部分:

    • destfile:exec文件输出路径,默认是jacoco.exec

    • append: 如果设置为true并且执行数据文件已经存在,那么coverage数据将附加到现有文件中。如果设置为false,将替换现有的执行数据文件,就是每次会生成一个新的,一般是设为true,不然之前测试的coverage数据,server重启之后会丢失。默认true

    • output: 输出Coverage数据的方法:

      • file: 在虚拟机停止的时候会将数据写入到destfile指定的文件,我们目前指定是这个方法。

      • tcpserve:代理在由address和port属性指定的TCP端口上侦听传入连接。执行数据将写入此TCP连接

      • tcpclient:启动时,代理连接到由address和port属性指定的TCP端口。执行数据将写入此TCP连接。

      • none: 不产生任何输出

    • excludes:忽略的Class列表,使用冒号(:)分割,并且可以使用通配符(*和?)。除性能优化或技术特殊情况外,通常不需要此选项。 如果要从报告中排除类别,请相应地配置相应的报告生成工具。

  • 生成Coverage Report

    这里我们使用的是jacococli.jar 生成的,文档, 需要jacoco的版本大于0.8.0, 通过命令java -jar lib/jacococli.jar report 10_QA_Jacoco/jacoco_exec/*.exec --xml ./coverage.xml --sourcefiles 10_QA_Jacoco/**/src/main/java --classfiles 10_QA_Jacoco/from_server/oocl/即可生成coverage.xml。 Options的选项可以参考下面这个列表,我们生成的是xml文件,为了之后生成增量的覆盖率做准备。

    Option Description Required Multiple
    <execfiles> list of JaCoCo *.exec files to read
    --classfiles location of Java class files
    --csv output file for the CSV report
    --encoding source file encoding (by default platform encoding is used)
    --help show help
    --html output directory for the HTML report
    --name name used for this report
    --quiet suppress all output on stdout
    --sourcefiles location of the source files
    --tabwith tab stop width for the source pages (default 4)
    --xml output file for the XML report
  • 生成增量覆盖率报表

    这里使用了一个开源的工具diff-cover, 可以结合coverage.xml和git diff来得到新加行以及修改行的覆盖率报表。在项目目录下运行diff-cover coverage.xml --compare-branch=origin/tmscloud_release --html-report report.html --src-roots biz1/src/main/java biz2/src/main/java

    diff-cover 会比较当前分支和--compare-branch指定的分支从而得出修改的行,我们这里指定的release branch,从而得到上次版本之后修改的行。然后结合之前生成coverage.xml. 会生成一个html到--html-report指定的文件中,其中--src-roots指定源代码的相对路径,对于maven项目来说一定要制定到java这一层目录。命令运行完成之后会得到一个report。里面有一个table给出了每个文件修改行的覆盖率和未覆盖的行,后面还会打印出未覆行的代码。

覆盖率占比报表

红色未覆盖行
  • 显示未覆盖行的提交信息和提交者:

    上面报告完成之后,QA反馈说只显示了行号,没有显示修改行的提交信息(commit message)和提交人(committer)。所以就修改了一下diff-cover的源代码加了一下这两个内容。获取修改行的提交记录以及提交人可以使用命令git blame --incremental -L 20,+1:NtOrderUpdator.java详细这里就不说了,可以参考git的文档git blame,这个命令会打印出以下信息:

    d4a9bda57733fdbf7af8f24607a542a6f9ab74d4 18 20 4
    author Test
    author-mail <Test@oocl.com>
    author-time 1589878340
    author-tz +0800
    committer Tony
    committer-mail <Test@oocl.com>
    committer-time 1589878340
    committer-tz +0800
    summary ST245849
    filename NtOrderUpdator.java

其中的author就是我们需要的提交者,summary就是我们需要的提交信息,将其解析出来并应用于我们的html报表:

image.png

其中红色就是我们提交信息和提交人,后面紧跟着的就是对应修改行,这样我们就可以追踪未覆盖的修改行对应的stroy号以及修改人。

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