在azure构建管道中生成Asp.net单元测试的代码覆盖率报告时,我需要指导。我的项目基于.Net Framework 4.6。
我可以使用“ Visual Studio测试” 任务运行所有单元测试。
我尝试了“报告生成器” 任务,但是它需要cobertura或jacoco等xml文件,这些文件无法在构建管道中生成。
期望-我想获取运行的单元测试的代码覆盖率报告,该报告将显示完整的信息,例如行覆盖率,分支覆盖率,功能覆盖率等,与“报告生成器”生成的信息相同。
注意:我能够在本地系统上使用opencover和reportgenerator生成报告,但无法找到在Azure构建管道中执行相同操作的方法。
答案 0 :(得分:2)
要在.Net框架中获取代码覆盖率结果,只需在“ Visual Studio测试”任务中启用它即可:
如果您使用.yml
,则语法为:
- task: VSTest@2
inputs:
codeCoverageEnabled: true
结果:
注意:如果使用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" }
然后使用以下参数添加“发布代码覆盖率”任务:
结果:
答案 1 :(得分:1)
对于在当前的 .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
,但它不会发布代码覆盖率。该功能尚不可用(至少在非 Windows 中不可用)。
下一个添加 - Publish code coverage results
任务。选择“代码覆盖率工具”作为“Cobertura”并在“摘要文件”字段中添加$(Agent.TempDirectory)/**/coverage.cobertura.xml
。看起来像这样: