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

时间:2019-02-11 09:58:25

标签: azure azure-devops azure-pipelines asp.net-4.5 nunit-3.0

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

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

code coverage download link

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

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

3 个答案:

答案 0 :(得分:7)

更新:

根据Sprint 150的Azure Devops版本

  

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

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

编辑:


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

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


不要使用VS测试任务

运行此任务将使您可以通过一个简单的复选框来收集覆盖率,但是随后您将有机会为代码覆盖率标签

提供内容

no VsTest task



直接安装工具

使用Powershell任务(或类似任务)直接安装 Coverlet Report 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 项目/程序集中表现不佳。但是,我们仍然可以使用dotnet命令,该命令将在代理计算机上,但是我们需要使用它作为进入 vstest.console.exe 的机制。

如您链接的文章所述,

覆盖工具将以 Cobertura 格式输出覆盖结果。

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


发布结果

use publish code coverage task



完整的脚本示例

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

"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 来找出引号的转义,我使用PSCX中的echoargs命令行开关的次数比我想承认的要多,因此我可以看到我正在进行的.exe调用中实际上得到了什么。



结果!

...因为这确实很重要

enter image description here



enter image description here




原始答案:


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

我不确定本文中所说的含义或作用方式

  

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

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

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

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

答案 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

答案 2 :(得分:0)

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

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

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

希望有帮助。