Code Coverage API plugin 一个新的代码覆盖率插件

Code Coverage API plugin 一个新的代码覆盖率插件

概要

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…

转载于:https://juejin.im/post/5c2c525f51882561431a506d

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101228.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipse导入maven工程pom.xml文件不起作用[通俗易懂]

    eclipse导入maven工程pom.xml文件不起作用[通俗易懂]导入硬盘中的maven工程时要确保import的是maven选项下的ExistingMavenPojects。接着要替换maven仓库的地址为自己定义的地址window->preference->maven->usersettings

    2022年5月23日
    41
  • java中怎么输入数组_java中如何从键盘输入数组

    java中怎么输入数组_java中如何从键盘输入数组相关知识说明:java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。nextLine()函数:1、以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。2、可以获得空白。在线视频教程分享:java在线学习示例如下:publicclassexchangeNum{publicstaticvoidma…

    2022年6月26日
    32
  • Java中的增强型for循环「建议收藏」

    Java中的增强型for循环「建议收藏」增强型for循环定义如下:for(ElementTypeelement:arrayName){};上述for循环可被读为:foreachelementinarrayNamedo{…}——————————————————————————————-…

    2022年6月16日
    34
  • 数仓分层(ODS、DWD、DWS、DWT、ADS)和数仓建模

    数仓分层(ODS、DWD、DWS、DWT、ADS)和数仓建模文章目录一、数仓分层数仓概念ODS(原始数据层)做了哪些事DWD(明细数据层)做了哪些事DWS(服务数据层)做了哪些事DWT(主题数据层)做了哪些事ADS(应用数据层)做了哪些事二、数仓建模常用的建模工具ODS层DWD层DWS层DWT层ADS层一、数仓分层数仓概念什么是数仓:数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。数据仓库并不是数据的最终目的地,而是为数据最终的目的地做好准备。这些准

    2022年6月26日
    61
  • SpringBoot从入门到精通教程「建议收藏」

    SpringBoot从入门到精通教程「建议收藏」对于SpringBoot,很多人咨询了我的研究学习资料来源,除官方文档外,特例完整整理一下自己的平时参考学习其他资料,以及分享实战项目源码和代码资源,供大家参考学习主要教程一、我的SpringBoot系列教程(2020.3更新)我的SpringBoot系列进阶教程(Github仓库源码地址)基于springboot2.0.6.RELEASE版本的代码演示集合:SpringBo…

    2022年5月24日
    43
  • 值得推荐的Idea十几大优秀插件

    值得推荐的Idea十几大优秀插件最近,闲来无事,为了改变一下枯燥的编程环境,特地搜寻了下有助提升代码功力的插件,够装逼,够狂,拽,屌~绚丽的画面,多彩的跳动,让你区别其他程序猿。产品,测试,开发看到你的界面,眼睛都会发光~算了,

    2022年7月1日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号