用途
SonarQube — Coverage 技能用于识别测试覆盖率不足的文件,并精确定位需要补充测试的具体代码行。它面向使用 SonarQube 进行代码质量管理的开发与测试场景,帮助开发者快速找到覆盖率薄弱点。
主要能力
- 列出当前项目或指定项目中覆盖率最差的文件,按覆盖率升序排列。
- 通过
--max <n>只返回覆盖率小于等于 n% 的文件。 - 通过
--pr <id>分析拉取请求而非主分支。 - 通过
--file <key>跳过文件列表,直接查看某个文件的逐行覆盖率详情,包括未覆盖行和部分覆盖分支。
使用方式
基本命令形式:
sonar-coverage # 当前项目中覆盖率最差的文件
sonar-coverage my-project # 指定项目中覆盖率最差的文件
sonar-coverage my-project --max 50 # 仅覆盖率 <= 50% 的文件
sonar-coverage my-project --file src/auth/login.py # 单个文件的逐行详情
可选参数:
| 参数 | 含义 |
|---|---|
--max <n> |
仅返回覆盖率 ≤ n% 的文件(映射到 maxCoverage) |
--pr <id> |
分析拉取请求而非主分支 |
--file <key> |
跳过文件列表,直接查看该文件键的逐行详情 |
执行流程分为两步:先解析项目键(仅在需要时),再根据是否提供 --file 选择文件列表流程或行详情流程。文件列表流程调用 mcp__sonarqube__search_files_by_coverage,以表格形式按覆盖率升序展示结果;行详情流程调用 mcp__sonarqube__get_file_coverage_details,展示未覆盖行列表和部分覆盖分支表格。文件键格式为 <projectKey>:<path>,例如 my-project:src/auth/login.py。
前置条件
该技能要求已配置 SonarQube MCP Server,并且会话中可用的工具包括 mcp__sonarqube__search_files_by_coverage 和 mcp__sonarqube__get_file_coverage_details。若这些工具不可用,可尝试 sonar api CLI 回退方案。
若 MCP 工具与 CLI 回退均失败,需排查原因:
- MCP 服务器未注册:建议运行 sonar-integrate 技能进行配置,然后重启代理会话。
- 容器运行时未运行:SonarQube MCP Server 通过
sonar run mcp在 Docker/Podman/Nerdctl 容器内启动,守护进程停止时即使配置正确也不会产生工具。可运行docker ps(或podman ps/nerdctl ps)确认。 - 凭据未配置:运行 sonar-integrate 技能。
- 项目键错误或 MCP 配置中无默认项目:传入显式键,或检查 sonar-project.properties / 重新运行 sonar-integrate 技能。
适用场景
- 在持续集成或代码审查前,快速定位覆盖率不足的文件。
- 针对拉取请求检查新增代码的测试覆盖情况。
- 深入单个文件,找出需要补充测试的具体行和分支。
- 与 sonar-list-issues、sonar-quality-gate 等技能配合,形成完整的代码质量检查流程。
限制
- 依赖 SonarQube MCP Server 或 sonar api CLI,二者均不可用时无法工作。
- CLI 回退方案需要显式项目键,没有 MCP 默认值;若未解析到项目键,需询问用户或调用 sonar-list-projects。
- 不应自行编造其他 CLI 命令(例如
sonar mcp call或sonar coverage do并不存在)。 - 具体收费、价格、平台支持范围等信息暂未提供。