7

我需要在 azure build pipeline 中生成 Asp.net 单元测试的代码覆盖率报告的指导。我的项目基于.Net Framework 4.6。

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

我尝试了“报告生成器”任务,但它需要 cobertura 或 jacoco 等 xml 文件,这些文件无法在构建管道中生成。

期望 -我想获得已运行单元测试的代码覆盖率报告,该报告将显示完整的信息,如行覆盖率、分支覆盖率、函数覆盖率等,与“报告生成器”生成的相同。

注意:我可以在本地系统上使用 opencover 和 reportgenerator 生成报告,但无法在 azure build pipeline 中找到相同的方法。

4

2 回答 2

16

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

在此处输入图像描述

如果您使用.yml构建,则语法为:

- task: VSTest@2
  inputs:
    codeCoverageEnabled: true

结果:

在此处输入图像描述

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

如果您想要更详细的代码覆盖率报告,您可以coverlet在 .Net 框架中使用,方法是在管道期间安装该工具,然后生成报告。您可以使用 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" }

在此处输入图像描述

然后使用以下参数添加“发布代码覆盖率”任务:

在此处输入图像描述

结果:

在此处输入图像描述

于 2019-06-10T10:46:26.190 回答
2

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

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

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

    继续检查新版本。

  2. 前往 Azure devops,使用经典编辑器创建管道。执行恢复、构建步骤。(或者您可以选择 dotnet core 模板,如下所示): 在此处输入图像描述

  3. 在 dotnet core task 的测试命令中,添加参数 - --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)并在管道运行完成后查看结果: 在此处输入图像描述

于 2021-05-22T06:30:15.173 回答