如何将 nUnit/OpenCover 结果导入 SonarQube



我们正在运行 SonarQube 社区版版本 7.9.1(build 27448((当前最新的 docker 镜像(

我有一些nUnit测试,但我正在努力将代码覆盖率数据导入SonarQube。

我已经成功地使用SonarScanner.MSBuild(sonar-scanner-msbuild-4.6.2.2108-net46(使用以下命令将代码分析和nUnit测试的数量导入SonarQube:

SonarScanner.MSBuild.exe begin /k:"ProjectName" /d:sonar.host.url="..." /d:sonar.login="..." /d:sonar.cs.nunit.reportsPaths="NUnitResults.xml" 
MSBuild.exe ....sln /t:Rebuild
nunit3-console.exe --result=NUnitResults.xml pathtotests.dll
SonarScanner.MSBuild.exe end /d:sonar.login="..."

现在我想使用 OpenCover 将代码覆盖率信息获取到 SonarQube,所以我使用以下命令

SonarScanner.MSBuild.exe begin /k:"ProjectName" /d:sonar.host.url="..." /d:sonar.login="..." /d:sonar.cs.nunit.reportsPaths="NUnitResults.xml" /d:sonar.cs.opencover.reportsPaths="opencover.xml"
MSBuild.exe ....sln /t:Rebuild
nunit3-console.exe --result=NUnitResults.xml pathtotests.dll
OpenCover.Console.exe -output:opencover.xml -register:user -target:"nunit3-console.exe" -targetargs:"pathtotests.dll --result=NUnitResults.xml"
SonarScanner.MSBuild.exe end /d:sonar.login="..."

[我想我可能不必要地运行了两次 nUnit 测试,但一旦我解决了以下问题,我就会解决这个问题]

问题是我没有在SonarQube上获得任何代码覆盖率的详细信息。

检查SonarScanner日志,我可以看到OpenCover的以下输出:

Executing: nunit3-console.exe
NUnit Console Runner 3.10.0 (.NET 2.0)
Copyright (c) 2019 Charlie Poole, Rob Prouse
06 September 2019 09:24:53
Runtime Environment
OS Version: Microsoft Windows NT 10.0.14393.0
CLR Version: 4.0.30319.42000
Test Files
pathtoUnitTests.dll

Run Settings
DisposeRunners: True
WorkDirectory: ...
ImageRuntimeVersion: 4.0.30319
ImageTargetFrameworkName: .NETFramework,Version=v4.6.1
ImageRequiresX86: False
ImageRequiresDefaultAppDomainAssemblyResolver: False
NumberOfTestWorkers: 8
Test Run Summary
Overall result: Passed
Test Count: 35, Passed: 35, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
Start time: 2019-09-06 08:24:54Z
End time: 2019-09-06 08:24:57Z
Duration: 3.111 seconds
Results (nunit3) saved as NUnitResults.xml
Committing...
Visited Classes 12 of 12 (100)
Visited Methods 41 of 41 (100)
Visited Points 240 of 240 (100)
Visited Branches 41 of 41 (100)
==== Alternative Results (includes all methods including those without corresponding source) ====
Alternative Visited Classes 12 of 12 (100)
Alternative Visited Methods 41 of 53 (77.36)

现在检查目录,我可以看到我已经NUnitResults.xmlopencover.xml创建和填充。(我真的不知道如何阅读 OpenCover 结果,但它有我的单元测试的数据(

SonarScanner.MSBuild.exe end日志有以下花絮:

信息: 传感器 C# 测试覆盖率报告导入 [csharp]

信息:解析 OpenCover 报告路径。\opencover.xml

信息:将此代码覆盖率报告添加到缓存以供以后重用:path.\opencover.xml

WARN:代码覆盖率报告不包含所包含文件的任何覆盖率数据。有关故障排除提示,请参阅 https://docs.sonarqube.org/x/CoBh

信息:传感器 C# 测试覆盖率报告导入 [csharp] (完成( | 时间 = 14ms

信息: 传感器 C# 单元测试结果导入 [csharp]

信息: 分析 NUnit 测试结果文件路径。\NUnit结果.xml

信息:传感器 C# 单元测试结果导入 [csharp] (完成( | 时间 = 34ms

现在包括单元测试涵盖的类(我可以在 SonarQube 中看到它们标记为未覆盖(,所以我想要么 OpenCover 没有收集正确的信息,要么是将覆盖的文件与解决方案中的文件匹配时出错。

注意:检查这些测试应涵盖的项目,在"项目>生成>高级"下,"调试信息"设置为"调试配置full",某些资源似乎建议这是必需的。

知道我错过了什么/我哪里出错了吗?

更新

检查opencode.xml底部,它有以下内容:

<Module skippedDueTo="MissingPdb" hash="DD-83-09-69-9F-A7-11-FF-F5-BC-43-7C-87-B2-54-99-0D-A5-D5-61">
<ModulePath>C:WindowsMicrosoft.NetassemblyGAC_MSILMyCompany.Common.Utilityv4.0_1.0.0.0__bf95fa7f15863c9fMyCompany.Common.Utility.dll</ModulePath>
<ModuleTime>2019-09-05T16:07:28.6111533Z</ModuleTime>
<ModuleName>MyCompany.Common.Utility</ModuleName>
<Classes />
</Module>

这个解决方案的原始作者似乎喜欢把所有东西都塞进 GAC,所以我猜 OpenCover 是在 GAC 中寻找而不是在本地寻找 dll,而且 GAC 没有 pdbs。

我尝试按照手册中的建议设置 OpenCover-targetdir设置:

目标

目录的路径;如果目标参数已包含路径,则此参数可用于提供可以找到 PDB 文件的备用路径。

我还尝试使用-searchdirs(查找 PDB 的替代位置(。

但他们都没有解决它。

我可以告诉 OpenCover 使用 bin\Debug pdbs 吗?

https://github.com/OpenCover/opencover/wiki/Usage#notes-on-spaces-in-arguments

在目标参数中使用 \" 表示引号到 nunit3-console

SonarScanner.MSBuild.exe begin /k:"ProjectName" /d:sonar.host.url="..." /d:sonar.login="..." /d:sonar.cs.nunit.reportsPaths="NUnitResults.xml" /d:sonar.cs.opencover.reportsPaths="opencover.xml"
MSBuild.exe ....sln /t:Rebuild
OpenCover.Console.exe -output:opencover.xml -register:user -target:"nunit3-console.exe" -targetargs:""pathtotests.dll" --result=NUnitResults.xml"
SonarScanner.MSBuild.exe end /d:sonar.login="..."
Step1 : SonarScanner.MSBuild.exe begin /k:"Project-Name" /d:sonar.cs.opencover.reportsPaths=%cd%TestCoverResult.xml /d:sonar.exclusions="**/*.css,**/*.js,**/*.cshtml" /d:sonar.verbose="true" /d:sonar.host.url="https://host-url.com/" /d:sonar.login="Login-Token"
Step2 :  "C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMSBuild.exe" /t:Rebuild  
Step3 : ".packagesOpenCover.4.7.1221toolsOpenCover.Console.exe" "-target:.packagesNUnit.ConsoleRunner.3.12.0toolsnunit3-console.exe"  "-targetargs:.Test-ProjectbinDebugTest-Project.dll" "-output:.TestCoverResult.xml" -register:user
Step4 :  SonarScanner.MSBuild.exe end   

解释:

1 :reportsPath:指定代码覆盖率结果文件的路径。

2 :">.\packages\OpenCover.4.7.1221\tools\OpenCover.Console.exe":它是"OpenCover.Console.exe"的系统路径

3:".\packages\NUnit.ConsoleRunner.3.12.0\toolsunit3-console.exe":"nunit3-console.exe">的系统路径

相关内容

  • 没有找到相关文章

最新更新