[英]view code coverage report on azure devops portal
我正在运行 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( 链接)的解决方案,但没有针对 .Net 框架
根据Azure Devops for Sprint 150的发布
发布代码覆盖率报告时,您不再需要指定HTML文件。
因此,我的插图中的脚本不再需要直接使用报表生成器工具来创建html报表,并且在发布coverage结果时,不需要指定包含这些html报表的目录。
我发现从.Net Framework项目获得覆盖结果以显示代码覆盖率选项卡的技巧与链接文章的思路方式相同。
运行此任务将允许您使用简单的复选框收集覆盖范围,但您放弃了为代码覆盖率选项卡提供内容的机会
使用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" }
如果你正在努力找出引号的转义和使用等衾命令, 你并不孤单 。 我使用PSCX的echoargs
命令行开关的时间比我承认的要多,所以我可以看到实际上为我正在制作的.exe
调用提供了什么。
......因为那才是最重要的
由于您提到的链接文章正在安装和使用报表生成器全局工具的方式,我认为您仍然可以遵循这些指南来创建HTML内联和图表报表类型。
文章说,我不确定它的含义或工作原理,
重点是reporttypes:使用HTMLInLine在Azure DevOps页面上启用输出。 Azure DevOps Coverage页面在Web上显示index.html 。
我理解您可以使用该工具从.xml覆盖率结果创建HTML报告,然后将发布覆盖率结果和报告与Publish Code Coverage
任务一起Publish Code Coverage
。
因此,似乎所有你需要的是有.coverage工具的.xml格式。
我没有直接使用PowerShell,但您可以按照Report Generator文档中的说明编写C#实用程序来访问Coverage.Analysis
库。
对于在当前的 .NET(核心)5 中使用 xUnit 测试在 Azure Devops(使用经典编辑器,不带 Yaml)中寻找代码覆盖率的任何人:
在您的 xUnit 测试项目中,添加以下内容(它通常在 .NET 5 中默认提供,现在 xUnit 模板):
<PackageReference Include="coverlet.collector" Version="3.0.3" />
继续检查新版本。
前往 Azure DevOps,使用经典编辑器创建管道。 执行恢复,构建步骤。 (或者您可以选择 dotnet 核心模板如下):
在 dotnet core 任务的测试命令中,添加参数 - --collect:"XPlat Code Coverage"
。 请记住“XPlat 代码覆盖率”是友好名称且区分大小写。 您的测试命令如下所示: 如果要
Publish test results and code coverage
请选中此复选框: Publish test results and code coverage
,但不会发布代码覆盖率。 该功能尚未起作用(至少在非 Windows 中不起作用)。
下一步添加 - Publish code coverage results
任务。 选择“代码覆盖工具”作为“Cobertura”,并在“摘要文件”字段中添加$(Agent.TempDirectory)/**/coverage.cobertura.xml
。 看起来像这样:
您可以在azure devops管道中使用“发布代码覆盖率结果”任务来查看Jacoco格式的代码覆盖率结果。
有关设置和配置的更多信息,请查看MSDN中的博客
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.