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

时间:2012-10-11 16:40:19

标签: 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

无论我现在做什么,覆盖范围都没有出现。

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

编辑:添加更多笔记......

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

    Code coverage
    -
    Unit test success
    0 tests
    
  • 我也在看运行声纳跑步者的时候:

    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
    

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

sonar.python.coverage.reportPath=target/coverage.xml

答案 2 :(得分:1)

我遇到了类似的问题,SonarQube中没有反映python测试范围。当 coverage.xml 的源文件路径不正确,并且SonarQube在解析xml报告时找不到这些源文件时,就会发生此问题。

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

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

现在,SonarQube具有覆盖范围信息。

答案 3 :(得分:0)

这个问题的简单答案:-

  1. 当我们在另一个位置生成 XML 报告并在另一个位置运行 SonarAnalyze 时,通常会出现此问题。因此,Sonaranalyze 将无法选择coverage.xml 中提到的那些文件。

  2. 因此,如果您在 xml 文件中看到源代码,那么它们应该包含 某个位置,所以如果coverage.xml 中提到的位置 与 Sonaranalyze 的路径匹配,那么您的问题将得到解决。 来源<>a/b/c/d<>来源

  3. 现在的挑战是如何检查coverage.xml 的文件夹结构。要获得正确的文件位置和路径。我使用命令行进行检查,因为我在使用Windows 代理。 (Azure DevOps)

  • 任务:CmdLine@2

    输入:

    script: |
    
      echo  '$(System.DefaultWorkingDirectory)'
    
      dir
    
      dir subfoldername
    

dir 将列出所有目录或文件

  1. 然后在知道文件夹结构后,我通过更改coverage.xml 中的源目录来操作coverage.xml。 我使用 powershell 编辑了coverage.xml,您也可以使用sed 取决于您的代理。

对于 任务:PowerShell@2

  inputs:

    targetType: 'inline'

    script: |


  
      (Get-Content coverage.xml)| ForEach-Object { $_.replace("a/b/c","$(System.DefaultWorkingDirectory)") } | Set-Content coverage2.xml

      Copy-Item -Path coverage2.xml -Destination coverage.xml -PassThru

      Remove-Item coverage2.xml

对于 bash 用户 sed -i 's#a/b/c#D:/AZ#g;s#/x/c#D:/m#g;'覆盖.xml

然后我成功地获得了 Sonarqube 的报道。