概要

Code Coverage API plugin 是 Jenkins 在 GSoC 2018 中的一个子项目。GSoC 是一个由谷歌举办的,帮助在校学生进入开源社区,为开源组织贡献代码的活动。 在这个项目中,我的 mentor 是 Steven Christou, Supun Wanniarachchi, Jeff Pearce 和 Oleg Nenashev。 目前在Jenkins中,有很多插件都实现了代码覆盖率工具的接入,例如 Cobertura Plugin, Jacoco Plugin, Clover Plugin…但是这些插件的配置项,结果页展示的图表和显示的内容都是类似的。 因此,相对于现在的为每一个代码覆盖率工具都从头编写一个新的插件,我们能提供一个 API 插件将会大大减少开发者的工作量。这个 API 插件将处理那些最重复的工作,将其封装成不同的抽象层,并提供易于使用的 API 接口让其它插件去实现。 支持的代码覆盖率工具 内置 JaCoCo 其它实现了 Code Coverage API plugin 的插件 Cobertura (Cobertura Plugin) llvm-cov (llvm-cov Plugin)

Features

现代化的图表 代码覆盖率变化趋势图 支持源代码浏览 支持 Pipeline 和 Parallel Pipeline 支持 Report combining 提供 REST API 灵活的 Failed Conditions

现代化的图表

在概要表中我们可以看到当前位置的代码覆盖率概况。

在子概要表中,看到每一个子项的代码覆盖率情况。同时,使用右上角的 range handler 可以筛选出我们想要看到的项来减小表的大小。通过点击节点的名字可以进入子项的详情页,来看到更多的关于子项代码覆盖率的信息。

代码覆盖率变化趋势图

我们也支持代码覆盖率趋势图,来显示 Build 之间的代码覆盖率变化趋势。

源代码浏览

通过设置 Source File Storing Level 为 save last build source files(将会在当前和上一次Build的结果页中显示源码) 或者 save all build source files (在所有Build的结果页中显示源码) 来启用源代码浏览。 之后我们就可以在 File 元素的节点中看到源代码以及与之相关联的代码覆盖率信息。

Pipeline 和 Parallel Pipeline

API 插件提供 Pipeline 和 Parallel Pipeline 的支持,你可以在不同的 Branch 中调用插件: node { parallel firstBranch: { publishCoverage adapters: [jacocoAdapter('target/site/jacoco/jacoco.xml')] }, secondBranch: { publishCoverage adapters: [jacocoAdapter('jacoco.xml')] } }

Reports Combining

通过给 publishCoverage 设置 tag,把含有相同 tag 的报告结合为一个报告。 node { parallel firstBranch: { publishCoverage adapters: [jacocoAdapter('target/site/jacoco/jacoco.xml')], tag: ‘t’ }, secondBranch: { publishCoverage adapters: [jacocoAdapter('jacoco.xml')], tag: ‘t’ } } REST API

我们提供 REST API 供其它应用获取覆盖率信息。 覆盖率: …/{buildNumber}/coverage/…/result/api/{json|xml} 覆盖率变化: …/{buildNumber}/coverage/…/trend/api/{json|xml} 上一次Build的覆盖率: …/{buildNumber}/coverage/…/last/result/api/{json|xml} 上一次Build的覆盖率变化: …/{buildNumber}/coverage/…/last/trend/api/{json|xml}

灵活的 Failed Conditions

我们可以在 Global 和 Adapter 级别为不同的元素设置失败条件来控制 Build 的结果。

假如代码覆盖率符合失败的条件,插件将会使当前的 Build 失败。

其他功能

我们也支持其它一些像是自动检测报告,筛选覆盖率这样的功能,在插件的文档中可以找到 更多的信息。

架构

插件在运行过程中主要会做下面几个事情: 根据用户的配置找到代码覆盖率报告文件 使用 Adapter 将报告文件转化为统一的标准格式 解析标准格式的报告文件并并合并它们 显示解析后的结果 所以,我们可以简单编写一个 Adapter 来实现一个新的代码覆盖率工具。这个 Adapter 只需要做一件事,将其它格式的代码覆盖率报告转化为我们插件的标准格式。Adapter的实现方式基于 ExtensionPoint,所以我们可以将 adapter 的实现分离到不同的插件中,插件将会自动发现它们。 同时,为了简化转化的过程,我们也提供了一系列的抽象层。

The below diagram show the architecture of Code Coverage API plugin

实现一个新的代码覆盖率插件

我们通过实现CoverageReportAdapter这个 extension point 来实现一个新的插件。通过使用我们插件提供的抽象层,我们可以像下面这样的简单来实现 JaCoCo: public final class JacocoReportAdapter extends JavaXMLCoverageReportAdapter {

@DataBoundConstructor
public JacocoReportAdapter(String path) {
super(path);
}

/**

  • {@inheritDoc}

*/
@Override
public String getXSL() {
return "jacoco-to-standard.xsl";
}

/**

  • {@inheritDoc}

*/
@Override
public String getXSD() {
return null;
}

@Symbol("jacoco")
@Extension
public static final class JacocoReportAdapterDescriptor extends JavaCoverageReportAdapterDescriptor {

public JacocoReportAdapterDescriptor() {
super(JacocoReportAdapter.class);
}

@Nonnull
@Override
public String getDisplayName() {
return Messages.JacocoReportAdapter_displayName();
}
}

复制代码

} 在这里我们只做了两件事,实现了为 Java XML 报告编写的抽象层,提供了一个将 JaCoCo 报告转化为我们标准格式的 XSL 文件。 假如你想要实现一个我们没有提供抽象层的代码覆盖率工具,你还需要注册 CoverageElement 并实现一个简单的 Parser。可参考 llvm-cov Plugin,更多的信息参见插件的 GitHub wiki page。 附文中链接: Code Coverage API plugin:jenkins.io/projects/gs… Steven Christou:github.com/christ66 Supun Wanniarachchi:github.com/Supun94 Jeff Pearce:github.com/jeffpearce Oleg Nenashev:github.com/oleg-nenash… Cobertura Plugin:github.com/jenkinsci/c… llvm-cov Plugin:github.com/jenkinsci/l… repo:github.com/jenkinsci/c…

Code Coverage API plugin 一个新的代码覆盖率插件相关推荐

  1. Jenkins集成Maven代码覆盖率插件Cobertura

    Jenkins集成Maven代码覆盖率插件Cobertura可以很好的测试到没有做单元测试的代码,代码测试覆盖率也是一个衡量代码质量的因素.Maven为我们提供了Cobertura插件,可以很好地配置 ...

  2. 学习笔记: 代码覆盖率-code coverage

    由于<Pycharm学习笔记01:PyCharm介绍>提出此名词,比较陌生. Code coverage is a metric that can help you understand ...

  3. 一个新的豆瓣API替代接口,可获取豆瓣、IMDB、烂番茄的电影/电视剧双语(中英)数据,支持IMDB和douban TOP250接口

    说明 本人有个项目需要使用豆瓣API接口获取一些影视数据,近段时间由于豆瓣API经常出问题,项目有点受影响,所以就下定决心,自己开发个类似接口,就结合Wikidata和爬虫,模仿豆瓣制作了一个新的AP ...

  4. 关于快速测试API接口的一个新技能

    这篇文章以亚马逊接口为例展示测试接口,主要给大家介绍了关于快速测试API接口的一个新技能,对大家的学习或者工作具有一定的参考学习价值 一.获取方式 打开测试网站,选取获得AMAZON商品详情 输入ke ...

  5. 【我的ASM学习进阶之旅】 介绍一个基于gradle transform api和ASM的字节码插件平台ByteX

    原文链接: https://github.com/bytedance/ByteX/blob/master/README_zh.md 文章目录 ByteX(Infinite Possibilities) ...

  6. IntelliJ IDEA 的 Code Coverage 测试

    IntelliJ IDEA 是可以帮我们进行 Code Coverage 测试的. 公司方面因为有新的要求,必须要达到多少的代码覆盖率,同时他们设置了 POM 中 JCoCo 的配置,如果达不到就不让 ...

  7. 插件制作教程 php,typecho插件编写教程(二):写一个新插件

    第一节我们了解了一个插件的基本构成,下面我们需要一个实例练习巩固. 真赶巧,老高最近正在改版百度sitemap提交插件for typecho,下面和老高一起改版吧! 准备 不知道大家用过WP版的百度结 ...

  8. iOS 9 学习系列:Xcode Code Coverage Tools

    2019独角兽企业重金招聘Python工程师标准>>> Code coverage 是一个计算你的单元测试覆盖率的工具.高水平的覆盖给你的单元测试带来信心,也表明你的应用被彻底的测试 ...

  9. .NET 4.0有一个新的GAC,为什么?

    本文翻译自:.NET 4.0 has a new GAC, why? %windir%\\Microsoft.NET\\assembly\\ is the new GAC . %windir%\\Mi ...

最新文章

  1. 笔试分享 | 带你解读校招人工智能笔试题
  2. FreeMarker中文帮助手册API文档,基础入门学习文档
  3. java 线程的函数_Java线程总结
  4. java并发框架支持锁包括,tip/面试题_并发与多线程.md at master · 171437912/tip · GitHub...
  5. YaaS,we can!
  6. 关于String.Intern()的一道题
  7. linux之cp/scp命令+scp命令详解
  8. 【IT资讯】华为“鸿蒙”所涉及的微内核究竟是什么
  9. hashmap 扩容是元素还是数组_曹工说JDK源码(1)--ConcurrentHashMap,扩容前大家同在一个哈希桶,为啥扩容后,你去新数组的高位,我只能去低位?...
  10. 阿里云MaxCompute被Forrester评为全球云端数据仓库领导者
  11. Win11如何清理D盘垃圾
  12. QT界面布局、系统信号和槽、启动进程、EDIT回车快捷键、正常信号和槽、QMessageBox、UIC使用(界面重新生成)
  13. 医疗人工智能市场有多大?
  14. 【NLP】Stanford
  15. ThinkPHP V5.0.5漏洞_ThinkPHP 5.x 远程命令执行漏洞分析与复现
  16. hdu 1254 推箱子(嵌套搜索,bfs中有dfs)
  17. 四十二、在线预览pdf文件
  18. sql查询慢原因及优化
  19. php 异步执行shell脚本
  20. SQL Server2008安装教程

热门文章

  1. Outlook提示:资料错误 (循环冗余核对)错误讯息
  2. Filter过滤器工作原理
  3. CPU数据通路的操作分析
  4. 在校大学生利用Python能干点什么靠谱的事情挣外快?这些方式你该知道!
  5. 倍福--轴耦合的操作方法
  6. Windows中ipconfig /all命令参数详解
  7. 使用HTML制作静态网站作业——我的校园运动会(HTML+CSS)
  8. setScale,preScale 和 postScale 的区别
  9. 基于SSM的海外代购系统设计与实现
  10. ffmpeg相关音频转格式命令,用于asr转写实践总结