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

问题描述 投票:0回答:2

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

我基本上跟着这个blog post并且它几乎正常工作,问题是我只看到了最后一个测试项目的覆盖范围,而不是两个。

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

我已经看到你可以使用像Coverlet这样的工具合并覆盖文件但是当我尝试(from this help page)时我遇到了一些错误(比如无法找到文件xunit.runner.reporters.netcoreapp10_101ce3bf-0896-4b2a-9f9e-67d8c0b742e6.pdb)

在遇到这个兔子洞之前,我宁愿知道我是否真的需要合并我的.coverage xml文件...如果是这样我可以使用常规工具来做,或者我需要像Coverlet这样的其他人...

干杯

azure .net-core sonarqube code-coverage azure-pipelines
2个回答
0
投票

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

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

我假设由于点网测试任务中传递的参数,您的最后一个测试项目数据将覆盖第一个测试项目。您需要确保所有测试用例在同一任务中一次运行。

任务如下 -

enter image description here

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

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

请参考这个,看看它是否有帮助。


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中添加此属性。

© www.soinside.com 2019 - 2024. All rights reserved.