我正在运行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'
但我无法看到覆盖率报告,我只看到覆盖结果的下载链接...
如何将.coverage报告转换为JaCoCo格式?或者以JaCoCo格式直接生成报告?
我见过.Net Core(link)的一些解决方案,但没有.Net框架的解决方案
根据发布到Azure Devops for Sprint 150
发布代码覆盖率报告时,您不再需要指定HTML文件。
因此,我的插图中的脚本不再需要直接使用报表生成器工具来创建html报表,并且在发布coverage结果时,不需要指定包含这些html报表的目录。
我发现从.Net Framework项目获得覆盖率结果以显示在代码覆盖率选项卡上的技巧与linked article的想法相同。
运行此任务将允许您使用简单的复选框收集覆盖范围,但您放弃了为代码覆盖率选项卡提供内容的机会
使用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
据我所知,dotnet test
与.Net Framework项目/程序集不相称。但是,我们仍然可以使用dotnet
命令,我们知道它将在代理机器上,但是我们需要将它用作访问vstest.console.exe的机制。
如您所链接的文章中所述,Coverlet工具将以Cobertura格式输出覆盖率结果,如果您这样做的话。
&$coverlet $unitTestFile.FullName --target "dotnet" --targetargs "vstest $($unitTestFile.FullName) --logger:trx" --format "cobertura"
注意:这个脚本非常粗糙,所以请将它作为个人情境的思考练习。
"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。我使用了来自echoargs
的PSCX命令行开关的次数比我承认的要多,所以我可以看到实际上为我正在制作的.exe
调用提供了什么。
......因为那才是最重要的
由于您提到的链接文章正在安装和使用报表生成器全局工具的方式,我认为您仍然可以遵循这些指南来创建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
库。
您可以在azure devops管道中使用“发布代码覆盖率结果”任务来查看Jacoco格式的代码覆盖率结果。
有关设置和配置的更多信息,请查看MSDN中的博客
希望能帮助到你。