You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目SonarQube显示0%覆盖率无单元测试问题求助

解决SonarQube无法读取Django项目coverage覆盖率的问题

1. 生成SonarQube兼容的XML格式覆盖率报告

coverage.py默认生成的二进制.coverage文件SonarQube无法直接识别,需要生成XML格式报告:

  • 先在本地项目目录执行测试并生成覆盖率数据:
    coverage run manage.py test maps
    
  • 生成XML格式的覆盖率报告:
    coverage xml -o coverage.xml
    
    执行后会在项目根目录生成coverage.xml文件。

2. 完善sonar-scanner扫描参数

当前扫描命令缺少覆盖率报告路径、项目标识等关键参数,补充后命令如下:

docker run -v /home/hind/Desktop/map-manager:/usr/src --network="host" sonarsource/sonar-scanner-cli \
  -Dsonar.host.url=http://localhost:9000/ \
  -Dsonar.login=sqp_e7171bd635104a04d29c523243cf54000946ea7f \
  -Dsonar.projectKey=map-manager \
  -Dsonar.projectName=map-manager \
  -Dsonar.projectVersion=1.0 \
  -Dsonar.sources=. \
  -Dsonar.python.coverage.reportPaths=coverage.xml \
  -Dsonar.python.test.reportPaths=test-results.xml

参数说明:

  • sonar.projectKey:项目唯一标识(与SonarQube中项目一致,未创建则自动生成)
  • sonar.python.coverage.reportPaths:指定容器内覆盖率XML文件路径(因项目挂载到/usr/src,直接写coverage.xml即可)
  • sonar.python.test.reportPaths:用于识别单元测试结果,需先生成对应XML报告(见下一步)

3. 生成单元测试结果XML报告(解决无单元测试数据问题)

Django默认manage.py test不生成XML报告,可通过以下方式生成:

方法1:Django 3.2+自带参数

执行测试时直接生成XML报告:

coverage run manage.py test maps --test-report test-results.xml

方法2:兼容旧版本Django(使用pytest-django)

安装依赖:

pip install pytest-django

用pytest执行测试并生成报告:

coverage run -m pytest maps/tests/ --ds=map-manager.settings --junitxml=test-results.xml

生成的test-results.xml需放在项目根目录。

4. 验证文件路径与权限

  • 确保coverage.xml和test-results.xml都在/home/hind/Desktop/map-manager目录下,保证容器内sonar-scanner能访问到。
  • 调整文件权限避免读取失败:
    chmod 644 coverage.xml test-results.xml
    

5. 重新执行扫描

运行完善后的sonar-scanner命令,扫描完成后刷新SonarQube页面,即可看到正确的覆盖率和单元测试数据。

内容的提问来源于stack exchange,提问作者H_E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:50:20