| name | defect-report-generator |
| description | 将缺陷/任务清单 CSV 自动转换成一份自包含的 HTML 测试缺陷报告。当用户给出一份 CSV(含任务状态/标题/负责人/模块/逾期等列)并要求"生成测试报告""出一份缺陷分析报告""根据缺陷清单做统计报告"时使用。脚本仅用 Python 标准库,图表为内联 SVG + CSS(无 CDN),离线可打开。也适用于任务清单、Bug 列表、工单导出的质量分析。 |
| agent_created | true |
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 —— 核心脚本,标准库实现,见上方"使用流程"。