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.xmlcoverage.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
相关产品推荐
相关产品推荐

