将多个 .NET Core 项目的测试范围从 Azure DevOps 发布到 SonarQube 服务器
Publish test coverage of multiple .NET Core Projects from Azure DevOps to SonarQube server
我有一个带有两个 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)
在 运行 进入这个兔子洞之前,我想知道我是否真的需要合并我的 .coveragexml 文件...如果可以,我可以使用常规工具来完成还是需要其他工具,例如被单...
干杯
这是一篇关于配置代码覆盖率并将其发布到 Sonarqube 服务器的非常好的文章。
https://allthingssharepoint.wordpress.com/2018/09/10/getting-coverage-reports-with-net-core/
我假设由于 dot net test 任务中传递的参数,您最后的测试项目数据正在覆盖第一个测试项目。您需要确保您的所有测试用例会 运行 一次完成同一任务。
任务如下-
也在准备对 SonarCloud 进行分析时
这是 SonarCloud 任务或 SonarQube 任务。您可以从 Marketplace 获取它们。除了通常的 Sonar 属性(项目、密钥、版本)之外,我们还需要在“高级”下提供 1 个额外的 属性:
sonar.cs.vscoveragexml.reportsPaths=$(Agent.BuildDirectory)\TestResults\TestCoverage.xml
请参考这篇文章,看看是否有帮助。
我终于找到问题了。
您不需要合并 .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 中添加此 属性。
我有一个带有两个 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)
在 运行 进入这个兔子洞之前,我想知道我是否真的需要合并我的 .coveragexml 文件...如果可以,我可以使用常规工具来完成还是需要其他工具,例如被单...
干杯
这是一篇关于配置代码覆盖率并将其发布到 Sonarqube 服务器的非常好的文章。
https://allthingssharepoint.wordpress.com/2018/09/10/getting-coverage-reports-with-net-core/
我假设由于 dot net test 任务中传递的参数,您最后的测试项目数据正在覆盖第一个测试项目。您需要确保您的所有测试用例会 运行 一次完成同一任务。
任务如下-
也在准备对 SonarCloud 进行分析时 这是 SonarCloud 任务或 SonarQube 任务。您可以从 Marketplace 获取它们。除了通常的 Sonar 属性(项目、密钥、版本)之外,我们还需要在“高级”下提供 1 个额外的 属性:
sonar.cs.vscoveragexml.reportsPaths=$(Agent.BuildDirectory)\TestResults\TestCoverage.xml
请参考这篇文章,看看是否有帮助。
我终于找到问题了。 您不需要合并 .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 中添加此 属性。