我正在通过声纳 - 跑步者运行一组非常简单的python项目,并且遇到了让测试显示的问题。
我正在使用Python插件1.1运行Sonar 3.2.1。覆盖率报告是先前生成的。
我有以下一套:
sonar.dynamicAnalysis=reuseReports
sonar.core.codeCoveragePlugin=cobertura
sonar.python.coverage.reportPath=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
答案 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)
这个问题的简单答案:-
当我们在另一个位置生成 XML 报告并在另一个位置运行 SonarAnalyze 时,通常会出现此问题。因此,Sonaranalyze 将无法选择coverage.xml 中提到的那些文件。
因此,如果您在 xml 文件中看到源代码,那么它们应该包含 某个位置,所以如果coverage.xml 中提到的位置 与 Sonaranalyze 的路径匹配,那么您的问题将得到解决。 来源<>a/b/c/d<>来源
现在的挑战是如何检查coverage.xml 的文件夹结构。要获得正确的文件位置和路径。我使用命令行进行检查,因为我在使用Windows 代理。 (Azure DevOps)
任务:CmdLine@2
输入:
script: |
echo '$(System.DefaultWorkingDirectory)'
dir
dir subfoldername
dir 将列出所有目录或文件
对于 任务: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 的报道。