我使用Sonar和OpenCover收集使用Jenkins作为CI系统的C#项目的代码覆盖率信息。 Sobar服务器是v4.3,跑步者在测试机器上的版本是2.3。
棘手的部分是:当我从测试机器的命令行(Server 2008R2)运行sonar runner时,它与OpenCover完美配合,并在测试完成后收集覆盖数据。例如:
14:31:36.479 INFO - Committing...
14:31:36.708 INFO - Visited Classes 53 of 114 (46.49)
14:31:36.710 INFO - Visited Methods 193 of 427 (45.2)
14:31:36.710 INFO - Visited Points 1804 of 4024 (44.83)
14:31:36.711 INFO - Visited Branches 862 of 2012 (42.84)
14:31:36.712 INFO -
但是如果我将它设置为从Jenkins作业运行完全相同的命令,它仍然可以正确执行测试,但无法收集覆盖信息并抱怨丢失的PDB或错误的探查器配置:
15:33:00.595 INFO - Committing...
15:33:00.879 INFO - No results, this could be for a number of reasons. The most common reasons are:
15:33:00.879 INFO - 1) missing PDBs for the assemblies that match the filter please review the
15:33:00.879 INFO - output file and refer to the Usage guide (Usage.rtf) about filters.
15:33:00.879 INFO - 2) the profiler may not be registered correctly, please refer to the Usage
15:33:00.879 INFO - guide and the -register switch.
然后,Sonar仪表板上的代码覆盖率报告为0%。
你们中的一些人可能已经经历过这种情况---它可能与某个地方的配置问题有关吗?我检查了SonarQube的网站,没有这样的信息;在网上冲浪,但很少有人谈到这一点,并认为这可能是Sonar的一个错误。
我最初的想法是,当我运行命令时,例如" SET JAVA_HOME = C:\ Program Files \ Java \ jre7& C:\ sonar_runner \ sonar-runner-2.3 \ bin \ sonar-runner.bat",它在我的帐户下;并通过Jenkins运行相同的命令,并且它在本地系统帐户下运行,因为它是由Jenkins Windows服务执行的。但是从Sonar-runner的输出中检查环境设置似乎都非常接近。
关于覆盖率数据丢失报告原因的任何线索?非常感谢: - )
答案 0 :(得分:1)
如果是探查器DLL,则可能是注册问题。
您可以使用regsvr32手动注册它们,然后使用drop -register开关。构建服务器有时作为服务运行,这就是解决方案。
或者可能是被测试的组件被复制到另一个位置(隔离?)但是PDB不是-targetdir选项可以用来纠正它。
有关OpenCover的更多信息可以在我们安装的wiki https://github.com/OpenCover/opencover/wiki/Usage或提供的文档中找到(nuget / msi / zip)