关于 coverage-drop-investigator
coverage-drop-investigator 是用于排查测试覆盖率回退并建议针对性测试的操作指南式技能。它对比 main 分支的覆盖率、定位低覆盖文件,并关联近期变更。
主要功能
- 01测量当前测试覆盖率
- 02与 main 分支对比覆盖率
- 03按覆盖率排列文件
- 04将低覆盖率关联到近期变更
- 05为未覆盖路径建议测试
适用场景
- 01排查代码变更后的覆盖率下降
- 02查找近期修改文件中未覆盖的分支
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ proffesor-for-testing/ agentic-qe --skill coverage-drop-investigator安装后在 Claude Code 中输入/coverage-drop-investigator确认已加载。
详细介绍
覆盖率下降调查
用于调查覆盖率回归的操作手册式技能。找出导致覆盖率下降的变更,并推荐有针对性的测试。
激活
/coverage-drop-investigator
调查流程
步骤 1:测量当前覆盖率
# Generate coverage report
npx jest --coverage --coverageReporters=json-summary
# View summary
cat coverage/coverage-summary.json | jq '.total'
步骤 2:查找覆盖率下降的时间
# Compare coverage with main branch
git stash && npx jest --coverage --coverageReporters=json-summary
mv coverage/coverage-summary.json coverage/baseline.json
git stash pop && npx jest --coverage --coverageReporters=json-summary
# Compare
jq -s '.[0].total.statements.pct as $baseline | .[1].total.statements.pct as $current | {baseline: $baseline, current: $current, delta: ($current - $baseline)}' coverage/baseline.json coverage/coverage-summary.json
步骤 3:识别未覆盖的文件
# Find files with lowest coverage
cat coverage/coverage-summary.json | jq 'to_entries | map(select(.key != "total")) | sort_by(.value.statements.pct) | .[0:10] | .[] | {file: .key, statements: .value.statements.pct, branches: .value.branches.pct}'
步骤 4:关联近期变更
# Find recently changed files with low coverage
git diff --name-only main...HEAD | while read file; do
jq --arg f "$file" '.[$f] // empty | {file: $f, statements: .statements.pct}' coverage/coverage-summary.json
done
步骤 5:推荐测试
对于每个未覆盖的文件,识别:
- 未覆盖的函数 — 需要新的测试用例
- 未覆盖的分支 — 需要针对条件的测试用例(if/else 路径)
- 未覆盖的行 — 可能表示死代码或缺少边界情况
步骤 6:报告
## Coverage Drop Report
- **Current**: {{current_pct}}%
- **Baseline (main)**: {{baseline_pct}}%
- **Delta**: {{delta}}%
- **Files causing drop**:
| File | Coverage | Changed Lines | Tests Needed |
|------|----------|--------------|-------------|
| {{file}} | {{pct}}% | {{lines}} | {{count}} |
- **Recommended action**: {{write_tests / accept_drop / mark_as_excluded}}
组合使用
调查完成后:
/qe-test-generation— 为未覆盖的文件生成测试/mutation-testing— 验证现有测试是否确实能捕获错误/coverage-guard— 防止未来覆盖率下降
注意事项
- 覆盖率下降可能是因为添加了新代码却没有测试,而不是因为删除了测试
- 100% 覆盖率并非总是目标 — 应关注关键路径,而非 getter/setter
- 分支覆盖率下降比行覆盖率下降更值得关注 — 分支代表逻辑路径
- 覆盖率工具可能会统计生成的代码或类型定义 — 使用 coveragePathIgnorePatterns 将其排除
评论
支持 Markdown