更新:
根据发布到Azure Devops的Sprint 150版本
在发布代码覆盖率报告时,您不再需要指定HTML文件。
因此,我的示例脚本不再需要直接使用报告生成工具来创建HTML报告,并且在发布覆盖率结果时,不需要指定包含这些HTML报告的目录。
编辑:
我发现从.Net Framework项目获取覆盖率结果并显示在代码覆盖率选项卡中的技巧与您链接的文章的思路相同。
- 不要在Azure中使用VS Test任务运行测试
- 直接安装Report Generator和Coverlet工具
- 使用dotnet-vstest命令通过Coverlet运行测试
- 发布用Report Generator生成的报告和Cobertura格式的覆盖率结果
不要使用VS测试任务
运行此任务将允许您通过简单的复选框收集覆盖率,但您将失去为代码覆盖率选项卡提供内容的机会。
![no VsTest task](https://istack.dev59.com/b7Xrd.webp)
直接安装工具
使用 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
通过Coverlet使用dotnet vstest
我理解dotnet test
与.Net Framework项目/程序集不兼容。但是,我们仍然可以使用dotnet
命令,因为我们知道它会在代理机器上,但我们需要将其用作访问vstest.console.exe的机制。
正如您链接的文章中提到的,Coverlet工具将在Cobertura格式中输出覆盖率结果,如果您告诉它这样做。
&$coverlet $unitTestFile.FullName --target "dotnet" --targetargs "vstest $($unitTestFile.FullName) --logger:trx" --format "cobertura"
发布结果
![use publish code coverage task](https://istack.dev59.com/Bj4fi.webp)
完整的脚本示例
注意:这个脚本还比较粗糙,所以将其作为针对您个人情况的思考练习。
"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命令时遇到引号等字符的转义问题,你并不孤单。我使用PSCX中的echoargs
命令行工具比我想象中的要多得多,这样我可以看到实际提供给我所做的.exe
调用的内容。
结果!!
...因为这才是真正重要的
![enter image description here](https://istack.dev59.com/C7xOk.webp)
![enter image description here](https://istack.dev59.com/tkclL.webp)
抱歉,我无法翻译您的请求。
由于您提到的链接文章安装和使用报告生成器全局工具的方式,我认为您仍然可以遵循创建HTML内联和图表报告类型的指南。
当文章中说到以下内容时,我不确定其含义或工作原理:
“关键是报告类型:使用HTMLInLine启用Azure DevOps页面上的输出。Azure DevOps覆盖率页面在Web上显示index.html。”
我理解您可以使用该工具从.xml覆盖结果创建HTML报告,然后与“发布代码覆盖”任务一起发布覆盖结果和报告。
因此,似乎您只需要具有.coverage工具的.xml格式。
我没有在纯PowerShell中使其工作,但是您可以按照
报告生成器文档中的说明编写C#实用程序以访问Coverage.Analysis库。
dotnet test
命令中的--no-build
选项。但是,这个选项在dotnet vstest
中不适用,使用它会导致测试失败。当使用dotnet vstest
工具时,该工具链将期望构建程序集,因此在Coverlet添加覆盖率工具后,不会重新构建程序集。 - Josh Gustindex.html
文件无法用于在覆盖选项卡上显示文件。此外,Coverlet的--include
和--exclude
选项非常好用。 - Josh Gust**\TestResults\*.trx
,然后测试结果回来了。 - Stinky Towel