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

SonarCloud代码覆盖率始终显示0%问题排查求助

排查SonarCloud代码覆盖率显示0%的解决方案(Bitbucket Cloud + Laravel 11 + PCOV环境)
  • 先确认coverage.xml本身是否有效

    • 直接打开生成的coverage.xml,查看里面的<file>节点是否存在line-rate不为0的条目——如果整个报告全是0,问题出在PHPUnit/PCOV环节,和SonarCloud无关
    • 验证PCOV是否正常启用:执行php -m | grep pcov,输出包含pcov说明扩展已安装;PHPUnit执行时加--verbose参数,日志里需出现“Using PCOV for code coverage”提示,没有则说明PCOV未生效
  • 核对路径映射是否匹配

    • 检查coverage.xml里<file>标签的name属性,若为绝对路径(如/home/user/project/app/xxx.php),SonarCloud可能无法识别,需改为相对项目根目录的路径(如app/xxx.php)
    • 在phpunit.xml中添加processUncoveredFilesFromWhitelist="true",确保未被测试覆盖的文件也能纳入报告
    • 在SonarScanner里明确指定sonar.sources,比如sonar.sources=app,src,避免SonarCloud误判源码目录
  • 排查SonarCloud配置细节

    • 再次核对sonar.php.coverage.reportPaths的路径,必须是相对于SonarScanner执行目录的路径——若coverage.xml在项目根目录则写coverage.xml,在build文件夹则写build/coverage.xml
    • 进入SonarCloud项目的「分析范围」设置,检查排除规则,确保没有误排除app/这类源码目录
    • 查看SonarScanner完整日志,除了“Imported coverage report”,还要留意是否有“所有文件都被排除,不会保存覆盖率信息”这类提示,出现则说明排除规则有问题
  • 调整PHPUnit覆盖率配置

    • 确保phpunit.xml的<filter>配置正确,示例:
      <filter>
          <whitelist processUncoveredFilesFromWhitelist="true">
              <directory suffix=".php">./app</directory>
              <directory suffix=".php">./src</directory>
              <exclude>
                  <directory suffix=".php">./app/Http/Controllers/API</directory> <!-- 按需添加无需统计的目录 -->
              </exclude>
          </whitelist>
      </filter>
      
    • 生成覆盖率时明确指定配置文件:php artisan test --coverage-clover=coverage.xml --configuration=phpunit.xml,避免PHPUnit使用默认配置导致异常
  • Bitbucket Cloud CI环境特殊检查

    • 确保Pipeline中生成coverage.xml和执行SonarScanner的步骤在同一工作目录,或路径传递正确
    • 添加步骤打印coverage.xml的前几十行内容,确认文件已生成且包含实际覆盖率数据
    • 检查文件权限,确保SonarScanner能正常读取coverage.xml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:49:49