如何在 Azure DevOps 构建中为 asp.net 单元测试生成代码覆盖率报告

How to generate code coverage report for asp.net unit tests in Azure DevOps build

我需要有关在 Azure 构建管道中生成 Asp.net 单元测试的代码覆盖率报告的指导。我的项目基于 .Net Framework 4.6。

我能够 运行 使用 "visual studio test" 任务的所有单元测试。

我尝试了 "report generator" 任务,但它需要 cobertura 或 jacoco 等 xml 文件,这些文件无法在构建管道中生成。

期望 - 我想获得 运行ned 单元测试的代码覆盖率报告,它将显示完整的信息,如行覆盖率、分支覆盖率、函数覆盖率等. 与 "report generator" 生成的相同。

注意:我可以在本地系统上使用 opencover 和 reportgenerator 生成报告,但无法找到在 azure 构建管道中执行相同操作的方法。

要在 .Net 框架中获得代码覆盖率结果,您只需在 "Visual Studio Test" 任务中启用它:

如果您使用 .yml 构建语法是:

- task: VSTest@2
  inputs:
    codeCoverageEnabled: true

结果:

注意:如果您使用 Microsoft Hosted Agent,您将看到结果,如果您使用 Self Hosted Agent,您必须 Visual Studio 企业版才能看到代码覆盖率结果。

如果您想要更详细的代码覆盖率报告,您可以在 .Net Framework 中使用 coverlet,方法是在管道期间安装该工具,然后生成报告。您可以使用 PowerShell 脚本:

dotnet tool install dotnet-reportgenerator --tool-path . --version 4.0.12
dotnet tool install coverlet.console --tool-path . --version 1.4.1
mkdir .\reports
$unitTestFile = gci -Recurse | ?{ $_.FullName -like "*bin\*test*.dll" }
$coverlet = "$pwd\coverlet.exe"
& $coverlet $unitTestFile.FullName --target "dotnet" --targetargs "vstest $($unitTestFile.FullName) --logger:trx" --format "cobertura"
gci -Recurse |
?{ $_.Name -eq "coverage.cobertura.xml"} |
%{ &"$pwd\reportgenerator.exe" "-reports:$($_.FullName)" "-targetdir:reports" "-reportstypes:HTMLInline;HTMLChart" }

然后使用这些参数添加 "Publish code coverage" 任务:

结果:

对于在当前 .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)并在管道 运行 完成后查看结果: