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 文件的主要内容,如果未能解决你的问题,请参考以下文章
如果搜索未找到,如何在 SonarQube 5.3 中删除项目?
如何将未覆盖的文件视为具有SonarQube通用覆盖XML的0覆盖?
Sonarqube 没有正确显示 Java 项目的测试覆盖率