SonarQube 未正确导入 Python 项目的 coverage.xml 文件

Posted

技术标签:

【中文标题】SonarQube 未正确导入 Python 项目的 coverage.xml 文件【英文标题】:SonarQube does not correctly import coverage.xml file for Python project 【发布时间】:2020-10-21 02:33:51 【问题描述】:

我正在 Linux 上开发一个 Python 项目。

我正在尝试将 coverage.xml 报告链接到 SonarQube 分析。

项目结构如下:

- root
    - folder1
      ...
    - folder2
      ...
    - ...
    - coverage.xml

我使用以下命令运行 SonarScanner 分析:

sonar-scanner \
 -Dsonar.projectKey=test \
 -Dsonar.sources=. \
 -Dsonar.host.url=http://localhost:9000 \
 -Dsonar.login=xxxxxxxx \
 -Dsonar.python.coverage.reportPaths=coverage.xml

除了总是不考虑的覆盖范围之外,一切都很好。

这里是控制台输出:

INFO: Python test coverage
INFO: Parsing report '/my/path/coverage.xml'
INFO: Sensor Cobertura Sensor for Python coverage [python] (done) | time=73ms
INFO: Sensor PythonXUnitSensor [python]
INFO: Sensor PythonXUnitSensor [python] (done) | time=13ms
INFO: Sensor SonarCSS Rules [cssfamily]
INFO: No CSS, php, html or VueJS files are found in the project. CSS analysis is skipped.
INFO: Sensor SonarCSS Rules [cssfamily] (done) | time=2ms
INFO: Sensor JaCoCo XML Report Importer [jacoco]
INFO: 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: 
target/site/jacoco/jacoco.xml,target/site/jacoco- 
it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml
INFO: No report imported, no coverage information will be imported by JaCoCo XML Report Importer
INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=9ms
INFO: Sensor JavaXmlSensor [java]
INFO: 1 source files to be analyzed
INFO: Sensor JavaXmlSensor [java] (done) | time=306ms
INFO: 1/1 source files have been analyzed
INFO: Sensor HTML [web]
INFO: Sensor HTML [web] (done) | time=5ms
INFO: Sensor XML Sensor [xml]
INFO: 1 source files to be analyzed
INFO: Sensor XML Sensor [xml] (done) | time=257ms
INFO: 1/1 source files have been analyzed
INFO: ------------- Run sensors on project
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=12ms
INFO: CPD Executor 21 files had no CPD blocks
INFO: CPD Executor Calculating CPD for 21 files
INFO: CPD Executor CPD calculation finished (done) | time=31ms
INFO: Analysis report generated in 86ms, dir size=397 KB
INFO: Analysis report compressed in 140ms, zip size=133 KB
INFO: Analysis report uploaded in 18ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard?id=test

我做错了什么?

【问题讨论】:

Parsing report '/my/path/coverage.xml' 存在吗?这个文件的内容是什么? 是的,它存在。这个文件是使用python包覆盖生成的,没有手动修改过 我认为你应该验证coverage.xml文件的内容。工具有时会生成空文件;)我不使用 Python,所以无法提供更多帮助。 文件不为空,看起来还不错。不管怎样,谢谢你的支持 我也面临这个问题。如果您能够解决此问题,请提供帮助。 【参考方案1】:

我遇到了同样的问题。问题出在coverage.xml 文件上。 pytest 生成的 xml 文件的源路径不正确。因此,SonarQube 无法访问源文件并带来覆盖数据。 要解决此问题,您可以检查 xml 文件中的源路径并手动更新它。 还有另一种使用覆盖库的解决方案,它将为我们修复 xml。

但这对我不起作用。 我还是会在这里添加。

安装覆盖率

pip3 install coverage

运行

python3 -m coverage xml -i

在保存 xml 的目录中。它应该修复源路径。但就我而言,它正在删除 xml 文件本身。 因此,我手动更新了源代码,SonarQube 能够显示覆盖范围。 但是无法手动更改源。

为了自动化我们可以使用

python3 -m coverage xml -i

希望它会有所帮助。

【讨论】:

以上是关于SonarQube 未正确导入 Python 项目的 coverage.xml 文件的主要内容,如果未能解决你的问题,请参考以下文章

django中的python模块未正确导入

如果搜索未找到,如何在 SonarQube 5.3 中删除项目?

如何将未覆盖的文件视为具有SonarQube通用覆盖XML的0覆盖?

Sonarqube 没有正确显示 Java 项目的测试覆盖率

Sonarqube TFS 任务返回错误 (401) 在一个项目上未经授权,但在其他项目上未授权

如何将 jasmine 报告导入 sonarqube 进行分析