查看azure devops门户网站上的代码覆盖率报告

问题描述 投票:2回答:2

我正在运行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'

但我无法看到覆盖率报告,我只看到覆盖结果的下载链接...

code coverage download link

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

我见过.Net Core(link)的一些解决方案,但没有.Net框架的解决方案

azure azure-devops azure-pipelines asp.net-4.5 nunit-3.0
2个回答
11
投票

Update:

根据发布到Azure Devops for Sprint 150

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

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

Edit:


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

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


Don't use the VS Test Task

运行此任务将允许您使用简单的复选框收集覆盖范围,但您放弃了为代码覆盖率选项卡提供内容的机会

no VsTest task



Install tools directly

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



Use dotnet vstest through coverlet

据我所知,dotnet test与.Net Framework项目/程序集不相称。但是,我们仍然可以使用dotnet命令,我们知道它将在代理机器上,但是我们需要将它用作访问vstest.console.exe的机制。

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

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


Publish results

use publish code coverage task



Complete script sample

注意:这个脚本非常粗糙,所以请将它作为个人情境的思考练习。

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

如果你正在努力弄清楚引用的逃脱,以及使用封面命令,YOU ARE NOT ALONE。我使用了来自echoargsPSCX命令行开关的次数比我承认的要多,所以我可以看到实际上为我正在制作的.exe调用提供了什么。



结果!!

......因为那才是最重要的

enter image description here



enter image description here




Original Answer:


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

文章说,我不确定它的含义或工作原理,

重点是reporttypes:使用HTMLInLine在Azure DevOps页面上启用输出。 Azure DevOps Coverage页面在Web上显示index.html。

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

所以你似乎只需要一个.cml格式的.coverage工具。

我没有让它在直接的PowerShell中工作,但你可以按照Report Generator documentation的指示编写一个C#实用程序来访问Coverage.Analysis库。


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

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.