我们正在运行SonarQube社区版7.9.1版本(构建27448) (当前最新的码头映像)
我有一些nUnit测试,但是我很难获得导入到SonarQube的代码覆盖率数据。
我已经成功地使用SonarScanner.MSBuild (声纳-扫描器-MSBuil-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 path\to\tests.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 path\to\tests.dll
OpenCover.Console.exe -output:opencover.xml -register:user -target:"nunit3-console.exe" -targetargs:"path\to\tests.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
path\to\UnitTests.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)现在检查一下我可以看到的dir,我已经创建和填充了NUnitResults.xml和opencover.xml。(我不知道如何读取OpenCover结果,但它有我的单元测试的数据)
SonarScanner.MSBuild.exe end日志有以下提示:
信息:传感器C#测试覆盖范围报告导入csharp INFO:解析OpenCover报表path.\opencover.xml 信息:将此代码覆盖率报告添加到缓存以供以后重用: path.\opencover.xml 警告:代码覆盖率报告不包含包含的文件的任何覆盖率数据。有关疑难解答提示,请参阅https://docs.sonarqube.org/x/CoBh 信息:传感器C#测试覆盖范围报告导入csharp / time=14ms 信息:传感器C#单元测试结果导入 信息:解析NUnit测试结果文件path.\NUnitResults.xml 信息:传感器C#单元测试结果导入csharp / time=34ms
现在包含了单元测试所涵盖的类(我可以在SonarQube中看到它们被标记为未发现),所以我猜OpenCover不是没有收集正确的信息,就是有些东西与解决方案中的文件匹配错误。
n.b.检查这些测试应该涵盖的项目,在project > Build > Advanced下,Debug信息设置为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:\Windows\Microsoft.Net\assembly\GAC_MSIL\MyCompany.Common.Utility\v4.0_1.0.0.0__bf95fa7f15863c9f\MyCompany.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 (寻找PDBs的替代位置)。
但他们都没有解决这个问题。
我可以告诉OpenCover使用bin\Debug pdbs吗?
发布于 2020-08-11 02:46:31
https://github.com/OpenCover/opencover/wiki/Usage#notes-on-spaces-in-arguments
在targetargs中使用\“表示nunit3 3-控制台的引号
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:"\"path\to\tests.dll\" --result=NUnitResults.xml"
SonarScanner.MSBuild.exe end /d:sonar.login="..."发布于 2021-10-11 04:23:19
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 Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe" /t:Rebuild
Step3 : ".\packages\OpenCover.4.7.1221\tools\OpenCover.Console.exe" "-target:.\packages\NUnit.ConsoleRunner.3.12.0\tools\nunit3-console.exe" "-targetargs:.\Test-Project\bin\Debug\Test-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\tools\nunit3-console.exe":它是“nunit3-控制台”的系统路径。
https://stackoverflow.com/questions/57818944
复制相似问题