1. 获取代码覆盖率

上一篇文章里,我们在 Pipeline 中插入一个单元测试并把所有单元测试都通过作为 Pipeline 通过的硬性要求。除此以外,我们还可以获取单元测试的代码覆盖率,用作衡量代码质量的指标。代码覆盖率没有一个标准,各个项目有各个项目的造化,不一定更高的单元测试覆盖率就代表项目的代码质量高。不过通过观察代码覆盖率的趋势也可以从另一个角度衡量项目的代码质量。

在 Azure Devops 有不同的方式生成代码覆盖率,例如使用 .NET Core CLI 编译项目的话可以参考这篇文章生成代码覆盖率:

【Azure DevOps系列】Azure DevOps生成代码覆盖率 - HueiFeng - 博客园

而在前面的文章里我都是使用 Visual Studio Build 编译并使用 Visual Studio Test 进行单元测试,那么事情就简单很多,只需在 VSTest 这个 task 的参数中加上 codeCoverageEnabled: true 即可,修改后的 YAML 如下:

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    codeCoverageEnabled: true

如果是图形化的 Pipeline 编辑器,则需要在 VSTest 的配置中选中 Code coverage enabled

之后,在 Pipeline 的运行结果中可以看到代码覆盖率:

切换到 Code Coverage 页面,点击 Download code coverage results 可以下载代码覆盖率的详细结果:

这个代码覆盖率的详细结果可以在 Visual Studio 中打开查看:

2. 观察代码覆盖率的趋势

之前说了,我们应该关心代码覆盖率的趋势。Azure Devops 也提供了这种扩展。做左边菜单选中 Overview -> Dashboard,导航到项目的仪表板,点击 Edit 按钮进入编辑模式,然后点击右下角的 Extension Gallery 进入 marketplace。

搜索并进入 Code Coverage Protector 页面,点击 Get it free 按钮。

选中我们的组织并安装:

回到仪表板页面并刷新,进入编辑模式,找到 Code Coverage,点击 Add 按钮:

Size 选择一个 4 X 3,然后在 Build definition 选项选中用于单元测试的 Pipeline,点击 Save

重复一次上面的操作,这次 Size 选择 1 X 1 添加一个只有一格大小的图表。最终结果如下,左边的打的图表显示代码覆盖率的趋势,右边小的图表显示当前代码覆盖率:

可以看到这个项目最近几次提交的代码覆盖率明显下降了,说明这几次提交都没做好单元测试。

3. 最后

关于Visual Studio 测试的更多内容,可以参考以下文档:

Visual Studio 测试任务 - Azure Pipelines Microsoft Docs

Visual Studio 生成和发布任务 - Azure Pipelines Microsoft Docs

如使用 .NET Core CLI 编译项目的话可以参考以下文章:

【Azure DevOps系列】Azure DevOps生成代码覆盖率 - HueiFeng - 博客园

[Azure Devops] 获取单元测试的代码覆盖率的更多相关文章

  1. 【Azure DevOps系列】Azure DevOps生成代码覆盖率

    前言 在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Vi ...

  2. Sourcetree 集成 Azure DevOps Server(Git)

    概述- SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mercurial和Subversion版本控制系统工具.支持创建.克隆.提交 ...

  3. Azure DevOps Server: 使用Rest Api获取拉取请求Pull Request中的变更文件清单

    需求: Azure DevOps Server 的拉取请求模块,为开发团队提供了强大而且灵活的代码评审功能.拉取请求中变更文件清单,对质量管理人员,是一个宝贵的材料.质量保障人员可以从代码清单中分析不 ...

  4. 在Azure DevOps Server中运行基于Spring Boot和Consul的微服务项目单元测试

    1 概述 谈到微服务架构体系,绕不开服务发现这个功能.服务发现机制是简化微服务配置.实现容灾.水平扩缩容.提高运维效率的重要方式.在服务发现工具中,Consul在部署和使用方面与容器结合的天衣无缝,成 ...

  5. asp.net core webapi/website+Azure DevOps+GitHub+Docker

    asp.net core webapi/website+Azure DevOps+GitHub+Docker 新春开篇作,主要写一下关于asp.net core web/api 2.2 项目借助dev ...

  6. [转贴]infoQ VSTS被拆成5个部分,以Azure DevOps服务形式推出

    VSTS被拆成5个部分,以Azure DevOps服务形式推出 http://www.infoq.com/cn/news/2018/09/vsts-divide5parts-azuredevops?u ...

  7. [Azure DevOps] 使用 Inno Setup 制作桌面软件安装包

    1. 桌面应用程序的 CI/CD 桌面应用程序的 CI/CD 过程和网站有一些不同,毕竟桌面应用程序的"部署"只是将安装包分发到目标位置,连应用商店都不用上,根据公司的管理流程可以 ...

  8. Jenkins构建Android项目持续集成之单元测试及代码覆盖率

    单元测试 在软件开发中一直在推崇TDD(测试驱动开发),但是一直不能被有效的执行或者并不是真正的测试驱动开发(先开发后写单元测试),因为我们懒!而Android开发又是大多应用层面的开发,很多都是和视 ...

  9. 如何将Azure DevOps中的代码发布到Azure App Service中

    标题:如何将Azure DevOps中的代码发布到Azure App Service中 作者:Lamond Lu 背景 最近做了几个项目一直在用Azure DevOps和Azure App Servi ...

随机推荐

  1. git include只包含某些文件

    .gitignore: * # include !.gitignore !a.txt !dir2

  2. NGK是如何运用IPFS分布式存储的?

    整个夏季,除了天气的火热,还有的火热莫过于IPFS挖矿这个领域了.IPFS的概念火热到,你可以看到到处都在卖IPFS矿机.那么,是什么原因导致IPFS这么火呢?在这之前,我们先了解一下什么是IPFS技 ...

  3. NGK八大板块:为何郊区市场近来火爆?-VALAITIS, PETER ANTHONY分析

    PAUL ADAMS ARCHITECT LTD董事长VALAITIS, PETER ANTHONY称受大环境影响很多纽约人都选择离开纽约市中心,搬往附近郊区,因此附近地区楼市开始不断升温. 根据房地 ...

  4. JavaScript高级-类的使用

    1.面向过程与面向对象 1.1面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了. 1.2面向对象 面向对象是把事务分解成为一个 ...

  5. css故障文字动画

    免费分享95套java实战项目,不仅有源码还有对应的开发视频,关注公众号『勾玉技术』回复"95"即可获取 首先给内容上hover和before, .glitch:hover:bef ...

  6. 整合shiro+jwt大体思路

    springboot整合shiro大体上的思路: 1.自定义一个类Realm extends AuthorizingRealm{} 主要是对token授权和认证 重写2个方法 doGetAuthori ...

  7. tomcat运行多个项目同一个端口与不同端口的设置

    一.首先打包项目 这里采用eclipse开发工具,选中项目右击,点击Export进入 选择web下的 WAR file ,点击next 在这里可能有坑,新装的eclipse没有web文件夹 此时需要下 ...

  8. FTP服务器搭建以及上传下载的学习

    首先需要搭建FTP服务步骤如下: 1.在win7上先开启ftp服务:这里点击确定后,可能会要等一会儿,完成后有时系统会提示重启 2.打开   计算机-->管理-->   在这里我们可以看见 ...

  9. 痞子衡嵌入式:系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败问题. 我们知道,i.MXRT1xxx家族早期型号(RT1050/ ...

  10. Linux 查看磁盘是否为SSD

    第一步,找到磁盘 ll /dev/sd* ll /dev/vd*   第二步,查对应磁盘类型 cat /sys/block/sda/queue/rotational 结果: 返回0:SSD盘 返回1: ...