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

前言

在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Visual Studio测试平台在已经集成了Coverlet格式的数据收集器,它其实并不难,它是可以开箱即用的。获取Coverlet格式报告几乎都是可以拿命令行参数去解决的。

在单元测试项目中需要引入nuget包coverlet.collector,当然只需要在单元测试项目中引用他,下面这个代码片段是单元测试模板自动生成的,我只是引入了一个我自己的类库。

<Project Sdk="Microsoft.NET.Sdk">  <PropertyGroup>    <TargetFramework>netcoreapp3.1</TargetFramework>    <IsPackable>false</IsPackable>  </PropertyGroup>  <ItemGroup>    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />    <PackageReference Include="xunit" Version="2.4.1" />    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>      <PrivateAssets>all</PrivateAssets>    </PackageReference>    <PackageReference Include="coverlet.collector" Version="1.3.0">      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>      <PrivateAssets>all</PrivateAssets>    </PackageReference>  </ItemGroup>  <ItemGroup>    <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" />  </ItemGroup></Project>

如何在Azure DevOps中使用?

第一步是在构建之前对项目进行还原nuget包,这会将所有的包拉到构建代理的本地文件夹中.
还原项目包(dotnet restore)

- task: DotNetCoreCLI@2    displayName: 'dotnet restore'    inputs:      command: restore

构建项目(dotnet build)

- task: DotNetCoreCLI@2    displayName: 'dotnet build'    inputs:      command: build

运行单元测试,其实上面的管道任务都是非常简单的,但是对于单元测试,我们需要设置dotnet cli将测试结果进行收集,搜集为cobertura格式,这是通过命令行参数来完成的。
正如下所示:
运行单元测试

- task: DotNetCoreCLI@2    displayName: 'dotnet test'    inputs:      command: test      projects: '**/XUnitTestProject1.csproj'      arguments: '--configuration $(BuildConfiguration) --collect "XPlat Code coverage" -- RunConfiguration.DisableAppDomain=true'

当然我们可以在coverlet中了解更多的信息https://discoverdot.net/projects/coverlet

安装报告生成工具

- task: DotNetCoreCLI@2  displayName: Install ReportGenerator Global Tool  inputs:    command: custom    custom: tool    arguments: install dotnet-reportgenerator-globaltool -g

使用reportgenerator工具生成报告

- script: 'reportgenerator -reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:"Cobertura"'    displayName: 'Create reports'

代码报告发布到Azure DevOps
最后这一步做的是将刚才生成的所有信息上传到Azure DevOps管道,这样我们就可以在Azure DevOps Ui中查看覆盖率的相关信息了。

- task: PublishCodeCoverageResults@1    displayName: 'Publish code coverage'    inputs:      codeCoverageTool: Cobertura      summaryFileLocation: '$(Build.SourcesDirectory)/coverlet/reports/Cobertura.xml'

查看报告
执行构建管道后,结果将在构建的“代码覆盖率报告”选项卡中可见。

常见问题

1.如果在Azure DevOps Linux镜像系统中是不可以的,可能会出现No executable found matching command "dotnet-reportgenerator" ,这个问题很头疼,我们在安装生成报告工具的时候并没有将全局命令安装成功,安装后并没有更新PATH,要解决这个问题要在调用reportgenerator另外执行一个CommandLine脚本:

- task: CmdLine@2   inputs:     script: 'echo "##vso[task.prependpath]$HOME/.dotnet/tools"'

2.如何生成覆盖率图标?

  • 覆盖率图标:https://img.shields.io/azure-devops/coverage/{组织名称}/{项目名称}/2/{分支}

  • 单元测试个数:https://img.shields.io/azure-devops/tests/{组织名称}/{项目名称}/2/{分支}

(0)

相关推荐

  • Choose a process like Basic, Agile, Scrum, or CMMI...

    In this article Basic, Agile, Scrum, and CMMI Main distinctions among the default processes Work ite ...

  • 关于.NET微服务最热门的问题解答

    dotNET跨平台 今天 在我们最近让我们一起学习 .NET的微服务专场活动中,我们收到了一些很好的问题.我们在现场已经回答很多问题,但我们想继续回答一些在会议中出现的最热门的问题.如果你错过了现场直 ...

  • DevOps vs Agile | Microsoft Azure

    Home Overview DevOps vs. agile DevOps vs. agile Both DevOps and agile are modern software developmen ...

  • 在 Azure App Service 上运行 .NET 6 预览版

    dotNET跨平台 昨天 以下文章来源于汪宇杰博客 ,作者汪宇杰 汪宇杰博客微软最有价值专家(MVP)汪宇杰,致力于Azure..NET等技术方向.无广告,不卖课,做纯粹的技术公众号.博客地址 htt ...

  • 【Azure DevOps系列】Azure DevOps多阶段构建

    对于阶段的流水线其实是特别有用的,我们可以将构建.测试.或者说部署分为多个阶段进行处理.将您的应用程序部署到多个环境中,并从一个环境逐步过渡到另一个环境.例如,可以在CI中运行单元测试后自动部署到De ...

  • WPF dotnet core 的 Blend SDK Behaviors 库

    之前版本是通过安装 Blend SDK 支持 Behaviors 库的,但是这个方法都是通过引用 dll 的方式,不够优雅.在升级到 dotnet core 3.0 的时候就需要使用 WPF 官方团队 ...

  • 使用Azure DevOps Pipeline实现.Net Core程序的CI

    上次介绍了Azure Application Insights,实现了.net core程序的监控功能.这次让我们来看看Azure DevOps Pipeline功能.Azure DevOps Pip ...

  • 一文全面精通DevOps

    一文全面精通DevOps

  • 提升软件交付效能——初探“按需发布”

    在精益思想的指导下,团队寻找开发流程中的阻碍点,并从各个层面做出调整策略.在业务侧,分析哪些需求可以做到按需发布,哪些需求无法做到,设定适合团队的按需发布标准,并调整迭代工作量.在开发侧,考虑数据的兼 ...

  • 软件测试需要学什么?

    本文从阿里测试工程师亲身经历的角度,和大家聊聊测试一行学习成长的经历. 对自动化测试个人看法 自动化是一个老生常谈的话题,也是一个软件领域非常有技术广度和技术深度的活动,特别是在大型软件的生命周期上. ...

  • 【Azure DevOps系列】Azure DevOps构建并发布Nuget程序包

    在Azure DevOps中,管道可以用来构建解决方案,O(∩_∩)O哈哈~快万能了,本章主要介绍如何创建Nuget包并且将其发布到Nuget服务器的过程. 前面我创建了一个非常简单的类库,这边我不做 ...

  • 一文全面了解DevOps

    一文全面了解DevOps