SonarQube 测试覆盖 .NET 5
SonarQube test coverage .NET 5
我想在我的本地 SonarQube 实例(在 Windows 上)显示我的 .NET 5 单元测试的测试覆盖率。
dotnet sonarscanner begin /k:"MyProject" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="<token>" /d:sonar.cs.opencover.reportsPaths="**\TestResults\*\*.xml"
dotnet build
dotnet test --no-build --collect:"XPlat Code Coverage"
dotnet sonarscanner end /d:sonar.login="<token>"
dotnet test
命令将覆盖率报告生成为 <TestProjectDir>.TestResults\<some-guid>\
文件夹中的 coverage.cobertura.xml
文件。
在日志中我可以看到以下警告:
WARN: Could not import coverage report '<MyTestProject>\TestResults\a4af5812-7f80-469b-8876-3ea0c7c4c98d\coverage.cobertura.xml' because 'Missing root element <CoverageSession> in C:\Users\<Path>\TestResults\a4af5812-7f80-469b-8876-3ea0c7c4c98d\coverage.cobertura.xml at line 2'. Troubleshooting guide: https://community.sonarsource.com/t/37151
在link from the warning message, I can see that only Visual Studio Code Coverage, dotCover and OpenCover/Coverlet are supported. As far as I can tell from their GitHub page之后,OpenCover/Coverlet是“XPlat代码覆盖率”。
在我的测试项目中,安装了 coverlet.collector
NuGet 包 v 3.0.3。
我错过了什么?
我发现了这个相关问题: 但它对我没有帮助,因为我无法使用 dotCover.
经过大量试验和错误后,这是对我有用的解决方案。
我必须安装最新版本的 dotnet-sonarscanner
和 dotnet-reportgenerator-globaltool
才能正常工作。我已经安装了报告生成器,但需要更新它才能使用 SonarQube 报告类型。
dotnet tool install --global dotnet-sonarscanner --version 5.2.0
dotnet tool update dotnet-reportgenerator-globaltool -g --version 4.8.7
使用 reportgenerator
可以将 cobertura 文件转换为 SonarQube 格式。
dotnet sonarscanner begin /k:"MyProject" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="<token>" /d:sonar.coverageReportPaths=".\sonarqubecoverage\SonarQube.xml"
dotnet build
dotnet test --no-build --collect:"XPlat Code Coverage"
reportgenerator "-reports:*\TestResults\*\coverage.cobertura.xml" "-targetdir:sonarqubecoverage" "-reporttypes:SonarQube"
dotnet sonarscanner end /d:sonar.login="<token>"
报表生成器支持的文件格式:https://github.com/danielpalme/ReportGenerator#supported-input-and-output-file-formats
SonarQube通用测试数据格式:
https://docs.sonarqube.org/latest/analysis/generic-test/
我认为问题在于您正在尝试导入 opencover 测试,但测试采用的是 cobertura 格式。您可以执行此命令代替您的测试:
dotnet test --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
它可能会奏效。
我想在我的本地 SonarQube 实例(在 Windows 上)显示我的 .NET 5 单元测试的测试覆盖率。
dotnet sonarscanner begin /k:"MyProject" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="<token>" /d:sonar.cs.opencover.reportsPaths="**\TestResults\*\*.xml"
dotnet build
dotnet test --no-build --collect:"XPlat Code Coverage"
dotnet sonarscanner end /d:sonar.login="<token>"
dotnet test
命令将覆盖率报告生成为 <TestProjectDir>.TestResults\<some-guid>\
文件夹中的 coverage.cobertura.xml
文件。
在日志中我可以看到以下警告:
WARN: Could not import coverage report '<MyTestProject>\TestResults\a4af5812-7f80-469b-8876-3ea0c7c4c98d\coverage.cobertura.xml' because 'Missing root element <CoverageSession> in C:\Users\<Path>\TestResults\a4af5812-7f80-469b-8876-3ea0c7c4c98d\coverage.cobertura.xml at line 2'. Troubleshooting guide: https://community.sonarsource.com/t/37151
在link from the warning message, I can see that only Visual Studio Code Coverage, dotCover and OpenCover/Coverlet are supported. As far as I can tell from their GitHub page之后,OpenCover/Coverlet是“XPlat代码覆盖率”。
在我的测试项目中,安装了 coverlet.collector
NuGet 包 v 3.0.3。
我错过了什么?
我发现了这个相关问题:
经过大量试验和错误后,这是对我有用的解决方案。
我必须安装最新版本的 dotnet-sonarscanner
和 dotnet-reportgenerator-globaltool
才能正常工作。我已经安装了报告生成器,但需要更新它才能使用 SonarQube 报告类型。
dotnet tool install --global dotnet-sonarscanner --version 5.2.0
dotnet tool update dotnet-reportgenerator-globaltool -g --version 4.8.7
使用 reportgenerator
可以将 cobertura 文件转换为 SonarQube 格式。
dotnet sonarscanner begin /k:"MyProject" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="<token>" /d:sonar.coverageReportPaths=".\sonarqubecoverage\SonarQube.xml"
dotnet build
dotnet test --no-build --collect:"XPlat Code Coverage"
reportgenerator "-reports:*\TestResults\*\coverage.cobertura.xml" "-targetdir:sonarqubecoverage" "-reporttypes:SonarQube"
dotnet sonarscanner end /d:sonar.login="<token>"
报表生成器支持的文件格式:https://github.com/danielpalme/ReportGenerator#supported-input-and-output-file-formats
SonarQube通用测试数据格式: https://docs.sonarqube.org/latest/analysis/generic-test/
我认为问题在于您正在尝试导入 opencover 测试,但测试采用的是 cobertura 格式。您可以执行此命令代替您的测试:
dotnet test --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
它可能会奏效。