Defect Report Generator(缺陷/任务清单 → 测试报告)
Overview
把一份缺陷(或任务/工单)CSV 清单,一键生成一份自包含、可离线打开的 HTML 测试缺陷报告。 报告包含:KPI 概览卡片、状态分布环形图、模块分布条形图、各模块状态明细表、负责人分布、 未完成(未关闭)缺陷清单、逾期清单、测试结论与改进建议、数据说明共 8 个章节。
设计要点:仅依赖 Python 标准库(csv/re/math/html/argparse),不联网、不装包;图表手写内联 SVG + CSS,因此双击 HTML 即可打开,不会因缺 CDN 而白屏。
WHEN to use
- 用户给出一份 CSV 并说:"生成测试报告 / 出缺陷分析报告 / 根据这份清单做统计 / 帮我看看缺陷情况"。
- 源文件是缺陷管理、Bug 跟踪、任务看板(TAPD/Jira/禅道等)导出的 CSV。
- 任务列表、工单列表、需求清单的"质量/进度"分析同样适用(列结构相同即可)。
Workflow(使用流程)
- 确认输入:拿到 CSV 路径。若用户没给标题/项目名/测试周期,可用
--title/--project/--period覆盖,或从 CSV 表头(项目列、开始/截止列)自动推断。 - 运行脚本(隔离 Python 环境,不要污染用户系统):
/Users/zhushengping/.workbuddy/binaries/python/versions/3.13.12/bin/python3 \ ~/.workbuddy/skills/defect-report-generator/scripts/generate_report.py \ "<CSV路径>" -o "<输出HTML路径>" \ [--title "报告标题"] [--project "项目名"] [--period "2026-07-10 ~ 2026-07-31"] - 核对输出:脚本会打印总数、各状态计数、未关闭数、逾期数、解决率、关闭率。 与业务预期对一下(例如"已验收=45、未关闭=11"是否合理)。
- 交付:用
present_files打开 HTML 预览交付;有必要则补充说明口径。
列自动识别规则(无需固定表头)
detect_columns() 按关键词模糊匹配表头,定位以下列(找不到则为空,统计降级):
| 逻辑列 | 命中关键词 |
|---|---|
| 状态 | 状态 / status |
| 标题 | 标题 / title / 名称 / summary / 主题 / 描述 |
| 负责人 | 负责人 / 处理人 / owner / assignee / 经办 |
| 模块 | 模块 / module |
| 逾期 | 逾期 / overdue / late |
| 任务ID | 任务id / 缺陷id / bug id / id / 编号 / 序号 |
| 项目/开始/截止 | 项目 / 开始 / 截止·due·完成日期·结束 |
- 模块优先从标题首段
【xxx】或[xxx]解析(extract_module),无括号才回退到模块列,都没有记"未分类"。 - 编码按
utf-8-sig → utf-8 → gbk → gb18030依次尝试,兼容带 BOM / 中文导出的 CSV。
状态映射规则(6 桶模型)
业务状态千奇百怪,脚本用关键词顺序匹配把它们归一成 6 个标准桶
(CANON_RULES,顺序很重要,先匹配更具体的):
| 标准桶 | 命中关键词(节选) | 业务含义 |
|---|---|---|
| 已验收 | 已验收/已关闭/验收/closed/verified/已解决 | 测试确认关闭 |
| 已拒绝 | 已拒绝/拒绝/rejected/wontfix/不予修复/不是缺陷/设计如此/重复/不修复 | 开发拒绝或无效缺陷(视为已处理) |
| 修复中 | 修复中/处理中/进行中/in progress/开发中 | 处理中 |
| 已修复 | 已修复/修复/fixed/resolved | 待验证 |
| 待确认 | 待确认/待处理/待验证/待修复/pending/新建/打开/重新打开/待 | 未关闭 |
| 其他 | (以上都不匹配) | 无法归类 |
口径:「未关闭」= 已修复 + 修复中 + 待确认 + 其他; 「解决率」= (已验收 + 已拒绝) / 总数;「关闭率」= 已验收 / 总数。
⚠️ 维护提示:若"修复中"被错误并入"已修复",说明
CANON_RULES里修复中元组不在已修复之前, 保持顺序即可(修复中必须在已修复之上,否则子串"修复"会把两者吞掉)。
输出报告章节
- 顶部信息条(项目 / 测试周期 / 生成日期 / 总数)
- KPI 卡片:缺陷总数、已验收、已拒绝、未关闭、逾期
- 一、缺陷状态分布(环形图 + 图例 + 解决进度说明)
- 二、缺陷模块分布(条形图,Top10 + 其他)
- 三、各模块状态明细表
- 四、负责人分布
- 五、未完成(未关闭)缺陷清单
- 六、逾期情况
- 七、测试结论与建议(结论 + 改进建议两栏)
- 八、数据说明与局限
局限与扩展
- 原数据若缺严重程度 / 优先级 / 发现版本等字段,报告不做相应分析(已在"数据说明"注明)。
- 可在脚本中扩展
CANON_RULES适配更多状态词;需要 Word/PDF 输出可叠加 docx/pptx 技能。 - 换一份同结构 CSV,改路径重跑即更新,无需改代码。
Resources
scripts/
generate_report.py—— 核心脚本,标准库实现,见上方"使用流程"。