从Azure DevOps到SonarQube服务器发布多个.NET Core项目的测试范围

时间:2019-03-18 16:53:48

标签: azure .net-core sonarqube code-coverage azure-pipelines

我有一个带有两个xunit测试项目的.net核心解决方案。该版本在Azure DevOps管道上运行,我想将测试范围发布到SonarQube(社区)服务器。

我基本上已经遵循了这个blog post,并且几乎可以正常工作,问题是我只看到上一个测试项目的覆盖范围,而没有看到这两个项目。

我可能是错的,但是从this issue起,我猜想在发送到SonarQube之前需要合并* .coveragexml文件。

我已经看到您可以使用Coverlet之类的工具合并coverage文件,但是当我尝试(from this help page)时遇到一些错误(例如找不到文件xunit.runner.reporters.netcoreapp10_101ce3bf-0896-4b2a-9f9e -67d8c0b742e6.pdb)

在进入这个兔子洞之前,我希望知道我是否真的需要合并我的.coveragexml文件...如果可以,我可以使用常规工具来完成它,还是需要其他诸如Coverlet之类的工具...

欢呼

2 个答案:

答案 0 :(得分:0)

这是一篇有关配置代码覆盖率并将其发布到Sonarqube服务器的很好的文章。

https://yuriburger.net/2018/09/10/getting-coverage-reports-with-net-core/

我假设由于 dot net test 任务中传递的参数,您的最后一个测试项目数据正在覆盖第一个测试项目。您需要确保所有测试用例都可以在同一任务中一次性运行。

任务将如下所示-

enter image description here

同时在SonarCloud上准备分析 这是SonarCloud任务或SonarQube任务。您从市场上获得它们。除了常规的Sonar属性(项目,键,版本),我们还需要在“高级”下提供1个额外的属性:

sonar.cs.vscoveragexml.reportsPaths=$(Agent.BuildDirectory)\TestResults\TestCoverage.xml

请参阅此内容,看看是否有帮助。

答案 1 :(得分:0)

我终于找到了问题。 您不需要合并.coveragexml文件,SonarScanner.MSBuild.exe的最新版本实际上可以找到所有.coveragexml文件。 我更仔细地查看了日志,发现有如下几行:

INFO: Sensor C# Tests Coverage Report Import [csharp]
INFO: Parsing the Visual Studio coverage XML report [...]
INFO: Adding this code coverage report to the cache [...]
INFO: Parsing the Visual Studio coverage XML report [...]
INFO: Adding this code coverage report to the cache [...]

因此找到了.coveragexml文件并将其发布到声纳。

报告的报道是错误的,因为我需要添加一个

<DebugType>Full</DebugType>

在项目中。奇怪的是,其他项目在.csproj中未设置此属性的情况下报告了一些代码覆盖率,因此我认为我不需要它。

因此,如果报告的覆盖率似乎是错误的,请尝试在csproj中添加此属性。