在Sonar中使用Python的测试/测试覆盖率没有显示出来?

tal*_*on8 9 python code-coverage sonarqube

我正在通过声纳运行器运行一组非常简单的python项目,并且遇到了让测试显示出来的问题.

我正在使用Python插件1.1运行Sonar 3.2.1.覆盖率报告先前生成.

我有以下几套:

sonar.dynamicAnalysis=reuseReports
sonar.core.codeCoveragePlugin=cobertura
sonar.python.coverage.reportPath=coverage.xml
Run Code Online (Sandbox Code Playgroud)

无论我在这一点上做什么,覆盖范围都没有显示出来.

我的测试与我的源码位于同一文件夹中......可能是问题吗?是否需要如何为覆盖率报告布置源代码以便通过声纳正确地进行分类?

编辑:添加一些笔记......

  • 它是一个多项目python实例.我有三个项目.其他一切似乎都在声纳报告中正确显示.我为每个定义了基本目录和源目录,并且已经将coverage.xml文件预先生成到每个目录的基本目录中.
  • 覆盖小部件显示但显示:

    Code coverage
    -
    Unit test success
    0 tests
    
    Run Code Online (Sandbox Code Playgroud)
  • 当我运行声纳跑步者时,我也看到了:

    10:04:29.641 INFO  p.PhasesTimeProfiler - Sensor PythonCoverageSensor...
    10:04:29.642 INFO  .p.c.CoberturaParser - Parsing report '/home/jenkins/jobs/myproject/workspace/trunk/src/python/coverage.xml'
    10:04:29.883 INFO  p.PhasesTimeProfiler - Sensor PythonCoverageSensor done: 242 ms
    
    Run Code Online (Sandbox Code Playgroud)

小智 8

也有这个问题,并且pytest没有生成一个格式正确的报道报告sonarqube可以利用什么.我coverage xml -i在pytest生成覆盖率报告后运行,并且此命令生成一个格式正确的覆盖报告,sonarqube了解该报告.

  • 请注意,如果您安装了 pytest-cov 插件,那么您可以通过将 ```--cov-report xml:/path/to/your/coverage.xml``` 直接传递给 pytest 来获得等效的插件。 (3认同)
  • 使用 pytest 4.5 和 pytest-cov 2.7.1 和 --cov-report xml:coverage.xml 仍然没有在声纳扫描仪上产生测试覆盖线 (2认同)

小智 5

我遇到了类似的问题,其中 python 测试覆盖率未反映在 SonarQube 中。当coverage.xml 的源文件路径不正确并且SonarQube 在解析xml 报告时无法找到这些源文件时,就会出现此问题。

Coveragepy 上存在针对同一问题的开放错误:https://github.com/nedbat/coveragepy/issues/578和解决方法https://github.com/LibraryOfCongress/concordia/pull/857。但是,这个解决方法对我不起作用。

我最终做了什么:运行我的测试命令(python -m pytest -m unit)生成具有错误路径的coverage.xml后,我运行了coverage xml -i。它会覆盖以前的coverage.xml,并具有源文件的正确路径。

现在 SonarQube 已经有了覆盖范围信息。


Fab*_*eam 3

“sonar.python.coverage.reportPath”必须指向覆盖文件相对于“sonar-project.properties”文件的路径。通常,这些临时文件是在“target”或“bin”等临时文件夹中生成的。所以你的配置应该更像:

sonar.python.coverage.reportPath=target/coverage.xml
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,如果帖子有点旧。如果工作目录发生变化,我发现了差异。覆盖范围不尊重属性文件,但尊重工作目录。 (3认同)