在Azure Devops门户上查看代码覆盖率报告

har*_*shr 9 azure asp.net-4.5 nunit-3.0 azure-devops azure-pipelines

作为azure devops构建管道的一部分,我正在运行NUnit测试(.Net Framework 4.5中的项目)。

- task: VSTest@2
  inputs:
    testAssemblyVer2: 'tests/**/*.Tests.dll'
    pathtoCustomTestAdapters: '$(Build.SourcesDirectory)/packages'
    codeCoverageEnabled: true
  displayName: 'NUnit Testing'

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: JaCoCo
    summaryFileLocation: '$(Common.TestResultsDirectory)/**/*.xml'
  displayName: 'Publish Code Coverage'
  //        summaryFileLocation: '$(Common.TestResultsDirectory)/**/*.coverage'
Run Code Online (Sandbox Code Playgroud)

但是我看不到覆盖率报告,只看到覆盖率结果的下载链接...

代码覆盖率下载链接

如何将.coverage报告转换为JaCoCo格式?或直接以JaCoCo格式生成报告?

我已经看到了一些针对.Net Core(链接)的解决方案,但是没有针对.Net框架的解决方案

Jos*_*ust 17

更新:

按照适用于Sprint 150的 Azure Devops的发行版

发布代码覆盖率报告时,您不再需要指定HTML文件。

因此,我的插图中的脚本不再需要直接使用报告生成器工具来创建html报告,并且在发布coverage结果时,无需指定包含这些html报告的目录。

编辑:


我发现从.Net Framework项目中获取覆盖率结果以显示在“ 代码覆盖率”选项卡上的窍门与链接文章的思路相同。

  1. 不要在Azure中使用VS测试任务运行测试
  2. 直接安装报告生成器Coverlet工具
  3. 使用DOTNET-vstest通过运行测试命令
  4. 发布使用报告生成Cobertura格式覆盖率结果生成的报告


不要使用VS测试任务

运行此任务将使您可以通过一个简单的复选框来收集覆盖率,但随后您将有机会为“ 代码覆盖率”选项卡提供内容

没有VsTest任务



直接安装工具

使用Powershell任务(或类似任务)直接安装CoverletReport Generator工具。这使您可以在非.Net Core的项目上使用它们。

"install tools:"
&dotnet tool install dotnet-reportgenerator-globaltool --tool-path . --version 4.0.12
&dotnet tool install coverlet.console --tool-path . --version 1.4.1

Run Code Online (Sandbox Code Playgroud)

通过Coverlet使用dotnet vstest

我的理解对.Net Framework项目/程序集dotnet test不起作用。但是,我们仍然可以使用该命令,该命令将在代理计算机上,但是我们需要将其用作获取vstest.console.exe的机制。dotnet

如您所链接的文章中所述,Coverlet工具会告诉您,它会以Cobertura格式输出coverage结果。

&$coverlet $unitTestFile.FullName --target "dotnet" --targetargs "vstest $($unitTestFile.FullName) --logger:trx" --format "cobertura"
Run Code Online (Sandbox Code Playgroud)

发布结果

使用发布代码覆盖任务



完整的脚本样本

注意:该脚本非常粗糙,因此可以将其用作针对个人情况的思想练习。

"install tools:"
&dotnet tool install dotnet-reportgenerator-globaltool --tool-path . --version 4.0.12
&dotnet tool install coverlet.console --tool-path . --version 1.4.1

"`nmake reports dir:"
mkdir .\reports

"`nrun tests:"
$unitTestFile = gci -Recurse | ?{ $_.FullName -like "*bin\*UnitTestProject2.dll" }
Write-Host "`$unitTestFile value: $unitTestFile"

$coverlet = "$pwd\coverlet.exe"

"calling $coverlet for $($unitTestFile.FullName)"
&$coverlet $unitTestFile.FullName --target "dotnet" --targetargs "vstest $($unitTestFile.FullName) --logger:trx" --format "cobertura"

"`ngenerate report(s)"
gci -Recurse | 
    ?{ $_.Name -eq "coverage.cobertura.xml" } | 
    %{ &"$pwd\reportgenerator.exe" "-reports:$($_.FullName)" "-targetdir:reports" "-reporttypes:HTMLInline;HTMLChart" }
Run Code Online (Sandbox Code Playgroud)

如果您想用Coverlet命令找出引号的转义内容,那么您就不会孤单了。我用的是echoargs从命令行PSCX更多的时间比我愿意承认,所以我可以看到什么是真正去提供给.exe我打电话。



结果!!

...因为那真的很重要

在此处输入图片说明



在此处输入图片说明




原始答案:


由于您提到的链接文章的安装和使用报告生成器全局工具的方式,我认为您仍然可以遵循这些准则来创建HTML内联和图表报告类型。

我不确定这篇文章说的是什么意思或如何工作,

关键是报告类型:使用HTMLInLine启用Azure DevOps页面上的输出。Azure DevOps覆盖率页面在Web 上显示index.html

我了解您可以使用该工具根据.xml覆盖率结果创建HTML报告,然后发布覆盖率结果并与Publish Code Coverage任务一起报告。

因此,似乎您所需要的只是.coverage工具的.xml格式。

我没有使其直接在Powershell中工作,但是您可以按照报表生成器文档中的说明编写C#实用程序来访问该Coverage.Analysis库。

  • Coverlet文档提到了为dotnet test提供的--no-build选项。这不是`dotnet vstest`的选项,包括它会产生失败的输出。“ dotnet vstest”链将期望在使用该工具时生成程序集,因此在** Coverlet **添加了coverage工具之后,没有重新构建程序集的风险。 (2认同)