在 azure devops 门户上查看代码覆盖率报告

view code coverage report on azure devops portal

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

- 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'

但是我看不到覆盖率报告,我只能看到下载 link 覆盖率结果...

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

我看到了一些针对 .Net Core (link) 的解决方案,但是 none 针对 .Net 框架

更新:

根据 Sprint 150

的 Azure Devops 发布

When publishing code coverage reports, you no longer need to specify HTML files.

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

编辑:


我发现的从 .Net Framework 项目获取覆盖率结果以显示在 代码覆盖率 选项卡上的技巧与您的 linked article.

  1. 不要 运行 在 Azure
  2. 中使用 VS 测试任务 进行测试
  3. 直接安装Report Generator and Coverlet工具
  4. 使用 dotnet-vstest 命令通过 Coverlet
  5. 进行 运行ning 测试
  6. 发布使用 Report GeneratorCobertura 格式覆盖率结果
  7. 生成的报告


不使用 VS 测试任务

运行 此任务将允许您使用一个简单的复选框来收集覆盖率,但是您随后放弃了为 代码覆盖率选项卡 [= 提供内容的机会31=]



直接安装工具

使用 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



通过 coverlet 使用 dotnet vstest

我的理解是 dotnet test.Net Framework projects/assemblies 的配合不佳。但是,我们仍然可以使用 dotnet 命令,我们知道它会在代理机器上,但我们需要将它用作一种机制来获取 vstest.console.exe.

如您链接的文章中所述,Coverlet 工具将以 Cobertura 格式输出覆盖率结果(如果您告诉它这样做)所以。

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


发布结果



完整的脚本示例

注意:这个脚本很粗糙,所以根据你的个人情况把它作为一个思维练习。

"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" }

如果您正在使用 Coverlet 命令努力弄清楚引号的转义等问题,YOU ARE NOT ALONE. I used the echoargs commandlet from PSCX 的次数比我关心的要多承认,这样我就可以看到实际提供给我进行的 .exe 调用的内容。



结果!!

...因为这才是真正重要的






原答案:


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

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

The point is the reporttypes: Use HTMLInLine for enabling the output on the Azure DevOps page. Azure DevOps Coverage page show index.html on the web.

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

看来您只需要 .xml 格式的 .coverage 工具即可。

我没有让它在直接的 powershell 中工作,但您可以按照 Report Generator documentation 中的说明编写 C# 实用程序来访问 Coverage.Analysis 库。

您可以在 azure devops 管道中使用发布代码覆盖率结果任务来查看 Jacoco 格式的代码覆盖率结果。

有关设置和配置的更多信息,请查看 MSDN 中的博客

https://docs.microsoft.com/hi-in/azure/devops/pipelines/tasks/test/publish-code-coverage-results?view=tfs-2015#q--a

希望对您有所帮助。

对于在当前 .NET(核心)5 中使用 xUnit 测试在 Azure Devops(使用经典编辑器,没有 Yaml)中寻找代码覆盖率的任何人:

  1. 在您的 xUnit 测试项目中,添加以下内容(它通常在 .NET 5 中默认提供,现在是 xUnit 模板):

    <PackageReference Include="coverlet.collector" Version="3.0.3" />

    继续检查新版本。

  2. 前往 Azure devops,使用经典编辑器创建管道。执行还原、构建步骤。 (或者您可以选择如下的 dotnet 核心模板):

  3. 在dotnet core任务的测试命令中,添加参数---collect:"XPlat Code Coverage"。请记住“XPlat 代码覆盖率”是友好的名称并且区分大小写。您的测试命令如下所示: 如果您想发布测试结果,请选中此复选框:Publish test results and code coverage,但它不会发布代码覆盖率。该功能尚不可用(至少在非 windows 中不可用)。

  4. 接下来添加-Publish code coverage results任务。选择“代码覆盖工具”作为“Cobertura”,并在“摘要文件”字段中添加 $(Agent.TempDirectory)/**/coverage.cobertura.xml。看起来像这样:

  5. 保存并排队(在任何代理中,我使用 Ubuntu)并在管道 运行 完成后查看结果:

  6. 覆盖率报告选项卡:

  7. HTML 覆盖率报告和覆盖率 cobertura xml 作为工件发布: