2

我正在使用 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 的输出中检查环境设置,似乎两者都非常接近。

关于缺少覆盖数据报告的原因的任何线索?太谢谢了 :-)

4

1 回答 1

1

如果探查器 DLL,则可能是注册问题。

您可以使用 regsvr32 手动注册它们,然后删除 -register 开关。构建服务器有时作为服务运行,这就是解决方案。

或者,可能是正在测试的程序集被复制到另一个位置(隔离?),但 PDB 不是 -targetdir 选项可用于纠正该问题。

有关 OpenCover 的更多信息,请参见 wiki https://github.com/OpenCover/opencover/wiki/Usage或我们安装时提供的文档 (nuget/msi/zip)

于 2014-06-20T20:23:53.387 回答