作为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'
但是我看不到覆盖率报告,只看到了覆盖率结果的下载链接...
如何将.coverage报告转换为JaCoCo格式?还是直接以JaCoCo格式生成报告?
我已经看到了.Net Core(link)的一些解决方案,但没有.Net框架的解决方案
答案 0 :(得分:7)
根据Sprint 150的Azure Devops版本
发布代码覆盖率报告时,您不再需要指定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 的机制。
覆盖工具将以 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" }
如果要使用 Coverlet 命令 YOU ARE NOT ALONE 来找出引号的转义,我使用PSCX中的echoargs
命令行开关的次数比我想承认的要多,因此我可以看到我正在进行的.exe
调用中实际上得到了什么。
...因为这确实很重要
由于您提到的链接文章的安装和使用报告生成器全局工具的方式,我认为您仍然可以遵循这些准则来创建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)中寻找代码覆盖率的任何人:
在您的 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
。看起来像这样:
答案 2 :(得分:0)
您可以在azure devops管道中使用“发布代码覆盖率结果”任务来查看Jacoco格式的代码覆盖率结果。
有关设置和配置的更多信息,请查看MSDN中的博客
希望有帮助。