Jenkins整合单元测试覆盖率和生成可读性报表

单元测试覆盖率,需要用到开源工具  Coverlet

git地址: https://github.com/coverlet-coverage/coverlet#main-contents

从介绍来看,使用 Coverlet 有三种形式:

   1.VSTest engine integration

       这种方式是XUnit 默认的方式,新建的项目就已经引用了 coverlet.collector 这个package.

       使用方式 分跨平台和windows 平台,主要区别就是使用的默认collect 收集器不一样

   dotnet test --collect:"XPlat Code Coverage"  // crossplantform.
   dotnet test --collect:"Code Coverage" //for windows 
这种方式没有生成表格数据,所以推荐下面的第二种。

   2.MSBuild task integration

      这种方式需要再引用一个package coverlet.msbuild

     dotnet add package coverlet.msbuild

     使用方式:

     dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=Cobertura //分项目生产测试分析文件

     想合并所有的测试分析文件到一个文件内可以使用下面命令:

     dotnet test /p:CollectCoverage=true /p:CoverletOutput =..\results\ /p:MergeWith=..\results\coverage.json /p:CoverletOutputFormat=cobertura%2cjson  

     其中 %2c是"," ,在powershell 里面“,” 报错,另外实践得知,MergeWith 这个文件怎么改名最终生成的结果都是生成 coverage.json 和 coverage.cobertura.xml  这两个文件

   3.As a .NET Global tool (supports standalone integration tests)

     没实践过.

报表转换工具Generatereports

上面已经生成了覆盖分析文件,但是可读性不好,怎么转换为可读性更好的Html,这个工具你需要用到,  ReportGenerator:

安装
dotnet tool install -g dotnet-reportgenerator-globaltool

  转换报表命令

reportgenerator
-reports:"Path\To\TestProject\TestResults\{guid}\coverage.cobertura.xml"
-targetdir:"coveragereport"
-reporttypes:Html

说下高级用法,如果你需要合并几个分析文件,你可以再reports里面用分号隔开。假设你上面的MergeWith 没成功可以用这个办法来合并生成报表文件。
reportgenerator -reports:"XUnit.Coverlet.MSBuild\coverage.cobertura.xml;XUnit.Randoms\coverage.cobertura.xml" -targetdir:"htmlreport" -reporttypes:Html

生成后的HTML

Unit test-generated report

 

reference: https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-code-coverage?tabs=windows

posted @ 2021-09-02 14:57  LearningAlbum  阅读(369)  评论(0)    收藏  举报