SonarQube配置完成后行/代码覆盖率始终显示为0的问题咨询
SonarQube行覆盖率、代码覆盖率显示为0排查方案
SonarQube自身不执行测试、也不直接计算覆盖率指标,所有覆盖率数据都依赖扫描阶段导入的测试覆盖率报告,指标显示为0基本都是报告生成、路径配置、解析匹配环节出了问题,按以下顺序排查即可:
- 确认测试执行阶段已生成合规的覆盖率报告
覆盖率报告必须在Sonar扫描之前生成,不同技术栈对应生成方式:- Java(Maven):引入JaCoCo插件,执行
mvn clean test jacoco:report,默认生成报告路径为target/site/jacoco/jacoco.xml - Java(Gradle):配置JaCoCo插件,执行
./gradlew test jacocoTestReport,默认生成报告路径为build/reports/jacoco/test/jacocoTestReport.xml - JavaScript/TypeScript:Jest/Vitest等框架开启覆盖率采集,执行
npx jest --coverage,生成lcov格式报告 - Python:安装pytest-cov插件,执行
pytest --cov=./ --cov-report=xml,根目录生成coverage.xml报告
注意:不要跳过test步骤直接执行扫描,没有测试执行过程就不会有覆盖率数据。
- Java(Maven):引入JaCoCo插件,执行
- 确认扫描配置中正确填写了覆盖率报告路径
可以在sonar-project.properties文件、CI扫描命令参数、Sonar项目配置页填写对应路径,核心配置项:- JaCoCo、pytest-cov生成的XML格式报告:配置
sonar.coverage.jacoco.xmlReportPaths=报告文件相对路径,多报告用英文逗号分隔 - JS/TS栈生成的lcov报告:配置
sonar.javascript.lcov.reportPaths=lcov.info文件相对路径
路径要写相对于扫描执行根目录的相对路径,注意目录层级、文件名拼写不要出错。
- JaCoCo、pytest-cov生成的XML格式报告:配置
- 通过扫描日志定位具体问题
执行sonar-scanner时查看控制台输出,筛选coverage相关日志:- 出现
No coverage report can be found类提示,说明路径配置错误或者报告未生成 - 出现报告解析失败提示,检查工具版本兼容性:SonarQube 9.x及以上版本要求JaCoCo版本不低于0.8.7,版本差异过大会导致解析失败
- 出现大量
Class not found类匹配失败提示,说明源码路径配置错误、测试代码被错误排除,或者多模块项目未单独配置子模块报告路径,导致报告内的类信息和Sonar扫描到的源码无法对应。
- 出现
- 排除常见配置误区
- 仅在Sonar仪表盘配置指标展示规则不会自动生成覆盖率数据,数据必须靠扫描阶段上传报告
- 多模块项目不要只配置根目录路径,每个子模块的报告路径要单独声明
- 社区版SonarQube不要安装来源不明的第三方覆盖率插件,插件冲突会导致覆盖率数据无法正常入库展示。
相关配置参考截图:
内容的提问来源于stack exchange,提问作者qatestprofile
相关产品推荐
相关产品推荐

