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

时间:2019-06-09 15:52:08

标签: unit-testing asp.net-web-api azure-devops azure-pipelines opencover

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

我可以使用“ Visual Studio测试” 任务运行所有单元测试。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

enter image description here

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

- task: VSTest@2
  inputs:
    codeCoverageEnabled: true

结果:

enter image description here

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

如果您想获得更详细的代码覆盖率报告,可以在.Net框架中使用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" }

enter image description here

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

enter image description here

结果:

enter image description here

答案 1 :(得分:1)

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

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

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

    继续检查新版本。

  2. 前往 Azure DevOps,使用经典编辑器创建管道。执行恢复,构建步骤。 (或者您可以选择 dotnet 核心模板如下): enter image description here

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

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

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