一键导入
generate-test-cases
自主学习型测试文档生成器。从需求文档(Markdown)生成测试用例 XMind 文件,支持持久化记忆和持续学习。当用户提到"生成测试用例"、"根据需求生成测试"时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
自主学习型测试文档生成器。从需求文档(Markdown)生成测试用例 XMind 文件,支持持久化记忆和持续学习。当用户提到"生成测试用例"、"根据需求生成测试"时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | generate-test-cases |
| description | 自主学习型测试文档生成器。从需求文档(Markdown)生成测试用例 XMind 文件,支持持久化记忆和持续学习。当用户提到"生成测试用例"、"根据需求生成测试"时触发。 |
| compatibility | Requires Python 3 |
从需求文档自动生成专业测试用例,具备深度解析、质量自检、自主学习能力。
生成的测试用例必须满足以下 7 维度(Phase 2.8 质量预审时逐项检查):
| 维度 | 标准 | 检查方式 |
|---|---|---|
| 需求覆盖 | 每条需求至少关联 1 条用例,覆盖率 ≥ 95% | 追溯矩阵计算 |
| 方法覆盖 | 每条需求至少使用 1 种设计方法,复杂需求 ≥ 2 种 | 方法分布统计 |
| 优先级分布 | P0: 10-15%, P1: 30-40%, P2: 30-40%, P3: 10-20% | 分布比例检查 |
| 步骤可执行 | 每条用例的步骤明确、可操作,预期结果可验证 | AI 自检 |
| 无需求外编造 | 所有用例来源于需求文档,不凭空编造场景 | 追溯关系验证 |
| 术语一致 | 用例中使用的术语与需求文档、terminology.json 一致 | 术语对照 |
| 无冗余重复 | 不同设计方法产生的用例无语义重复;已覆盖的验证目标不得以不同数据状态为由重复生成 | 去重扫描 |
采用快速模式:回车继续,仅在发现问题或异常时询问用户。
| 检查点 | 阶段 | 行为 |
|---|---|---|
| 解析确认 | Phase 2.5 | 摘要 + 有问题时询问 |
| 歧义处理 | Phase 2.6 | 仅关键歧义 |
| 生成预览 | Phase 2.8 | 统计数据 |
详细定义与示例见 TEST-DESIGN-METHODS.md
4 种方法按序叠加使用:
EP 等价类划分 → BVA 边界值分析 → ST 场景法 → EG 错误推测
| 方法 | 核心动作 | 触发条件 |
|---|---|---|
| EP 等价类 | 划分有效/无效等价类,无效类单独覆盖 | 有输入范围、格式、枚举约束 |
| BVA 边界值 | 测试上点、离点、内点 | 有数值/长度/时间边界 |
| ST 场景法 | 基本流→备选流→异常流各生成用例 | 涉及多步骤业务流程 |
| EG 错误推测 | 补充特殊字符、极端值、并发场景 | 高风险模块、历史缺陷多 |
详细规范见 TRACEABILITY.md
REQ-xxx、F1.2、US_042、PROJ-123 等模式;无ID时生成 MOD_{缩写}_{序号}详细规则见 TEST-PRIORITY.md
| 级别 | 来源 | 回归集 |
|---|---|---|
| P0 核心 | 基本流用例 | 冒烟测试(每次构建) |
| P1 主要 | 备选流 + 边界值 | 核心回归(每日/提测) |
| P2 次要 | 异常流 + 错误推测 | 全量回归(发版前) |
| P3 边缘 | 边缘错误推测 | 全量回归(发版前) |
完整 Schema 定义见 MEMORY-SCHEMA.md
Skill 在项目中创建 .memory/ 文件夹,存储跨会话学习数据:
.memory/
├── project-context.json # 项目上下文(路径、名称)
├── terminology.json # 领域术语库(自动学习 + 手动补充)
├── generation-history.json # 生成历史(质量趋势分析)
├── user-preferences.json # 用户偏好(交互模式、默认标签)
└── ambiguity-decisions.json # 歧义决策记录(避免重复询问)
核心机制:
generation-history.json(含覆盖率、优先级分布、标签)ambiguity-decisions.json,后续相似歧义自动复用requirements/、test-docs/ 等目录).memory/ 文件夹(memory_manager.py --action init)terminology.jsonuser-preferences.jsonrequirements/ 目录下所有 .md 文件,按文件名排序,文件间以 --- 分隔,拼接为完整需求文本requirements/ 目录下所有图片文件(.png、.jpg、.jpeg、.gif、.webp、.bmp、.svg),与需求文本一起作为多模态输入terminology.json → 解析时统一术语,避免同义词重复ambiguity-decisions.json → 相似歧义自动复用历史决策,跳过询问generation-history.json → 提取历史优先级分布作为基线,识别历史常见遗漏场景类型并主动补充user-preferences.json → 应用用户步骤粒度、标题风格等偏好ambiguity-decisions.json 比对,相似歧义自动复用历史决策使用 AskUserQuestion 确认解析结果:
已识别 X 个模块,Y 条需求,Z 条规则
ℹ️ 标签:使用上次选择「{default_tag}」(或首次询问)
仅在发现警告或无 default_tag 时询问用户
无警告且有 default_tag 则自动继续
当无 default_tag 或发现警告时,在此阶段询问标签(适用端)。询问前先检查需求文档是否有显式平台声明:
tag只适用于PC端、仅适用于APP、适用端:小程序 等直接声明语句,直接读取并应用,不得询问用户,并在摘要中提示 ℹ️ 标签:从需求文档读取「{tag}」本次用例适用哪些端?请输入编号或直接填写:
1. PC
2. APP
3. C端
4. PC, APP
5. 小程序
6. 其他(请说明)
重要:标签问题在此阶段完成后,Phase 2.6 / 2.8 及后续所有阶段不得再次询问适用端,即使将其视为歧义也不例外。
对检测到的歧义需求逐一询问:
需求原文:{text}
歧义类型:边界不明确 / 规则冲突 / 条件缺失
我的理解:{interpretation}
请选择:
1. 接受我的理解
2. 提供不同解释
3. 跳过此需求
4. 标记为待确认
使用 AskUserQuestion 预览生成方案:
质量自检(不通过则修正后再展示):
□ 覆盖率 ≥ 95%(未覆盖需求列表高亮)
□ P0 占比 10-15%
□ P1 占比 30-40%
□ 每条需求至少关联 1 种设计方法
□ 无需求外编造的场景
□ 无语义重复用例
将生成 X 条用例 | 覆盖率 ZZ% | P0:X P1:X P2:X P3:X
仅在质量自检不通过时询问
通过则回车继续
动作 + 对象 + 条件/场景,禁用模糊词(“正常”“正确”)N. 起始(如 1. 打开登录页面),对应预期结果使用相同编号(如 1. 显示账号密码输入框),编号从 1 开始连续递增,steps 与预期结果数组长度必须相等user-preferences.json 中存储的步骤粒度、标题风格偏好tmp/cases_<时间戳>.json(如 tmp/cases_20260225143022.json),目录不存在时自动创建YYYYmmddHHMMSS(正则:^\d{14}$)tmp/cases_20260226.json)scripts/generate_xmind.py -f tmp/cases_<时间戳>.json 生成 XMind 文件,输出路径固定为 test-docs/testcases_<时间戳>.xmind完整学习规则见 LEARNING-RULES.md
generation-history.json,包含覆盖率、优先级分布、用例数、标签、来源文件ambiguity-decisions.json,后续相似歧义自动复用terminology.jsonuser-preferences.json用户对生成结果提出修改时,自动触发学习:
| 反馈类型 | 示例 | 学习动作 |
|---|---|---|
| 纠正错误 | “这条用例逻辑不对” | 重新生成 + 记录歧义模式到 ambiguity-decisions.json |
| 删减用例 | “P2 太多了” | 询问“是否调整优先级分布作为默认?”→ 写入 user-preferences.json |
| 补充场景 | “还缺并发场景” | 增补用例 + 记录为常见遗漏到 generation-history.json |
| 修改术语 | “这里应该叫 XXX” | 询问“是否记住?”→ 写入 terminology.json |
| 调整步骤 | “步骤太细了,合并一下” | 询问“是否记住这个粒度偏好?”→ 写入 user-preferences.json |
固定节点结构(符合 XMind 导入规范):
根节点(项目名称)
└── 模块(最多8层)
└── tc-p0: 用例标题 / tc: 用例标题(无优先级时)
├── pc: 前置条件(非必填)
├── 步骤1
│ └── 预期结果1
├── 步骤2
│ └── 预期结果2
└── tag: 标签1,标签2(非必填)
AI 生成用例时输出的 JSON 字段:
| 字段 | 必填 | 说明 |
|---|---|---|
模块 | ✅ | 数组,最多8层,如 ["登录", "账号密码"]。末级目录按功能区域分组,不以单个功能点命名,规则见下方「模块分组规则」 |
用例标题 | ✅ | 格式:动作 + 对象 + 条件/场景,如“输入正确账号密码登录成功” |
优先级 | ✅ | P0/P1/P2/P3,影响节点前缀 |
需求ID | ✅ | 关联的需求标识,如 REQ-001、MOD_LOGIN_001 |
设计方法 | ✅ | EP/BVA/ST/EG 之一或多个,如 ["EP", "BVA"] |
前置条件 | ❌ | 生成 pc: 子节点 |
步骤 | ✅ | [{"操作": "1. ...", "预期": "1. ..."}],操作与预期均以数字序号起始,同一步骤编号一致 |
标签 | ✅ | 测试端标识,多端用逗号+空格分隔,如 PC、APP、PC, APP |
模块分组规则:
末级目录必须按功能区域归类,而非按单个功能点各自建目录。同一功能区域的所有用例共用同一个末级目录节点。
| 功能区域 | 末级目录名 | 包含的用例范围 |
|---|---|---|
| 列表展示、排序、标签、筛选、搜索 | 列表 | 列表页面上能看到的所有内容 |
| 新增/创建表单 | 新增 | 点击新增按钮后的页面/弹窗 |
| 编辑表单 | 编辑 | 编辑页面/弹窗相关用例 |
| 详情页 | 详情 | 查看详情页面相关用例 |
| 删除操作 | 删除 | 删除相关用例 |
| 导出功能 | 导出 | 导出相关用例 |
| 导入功能 | 导入 | 导入相关用例 |
| 权限控制 | 权限 | 权限相关用例 |
✅ 正确示例(汇总表需求含标签展示+排序逻辑,全部归入「列表」):
{"模块": ["汇总表", "列表"], "用例标题": "系统报表展示【系统】标签"}
{"模块": ["汇总表", "列表"], "用例标题": "自定义报表不展示【系统】标签"}
{"模块": ["汇总表", "列表"], "用例标题": "系统汇总表排在上方自定义汇总表排在下方"}
❌ 错误示例(为每个功能点各建一个目录,导致目录过多):
{"模块": ["汇总表", "系统报表标签"], "用例标题": "系统报表展示【系统】标签"}
{"模块": ["汇总表", "自定义报表标签"], "用例标题": "自定义报表不展示【系统】标签"}
{"模块": ["汇总表", "列表排序"], "用例标题": "系统汇总表排在上方自定义汇总表排在下方"}
JSON 完整示例:
{
"模块": ["用户登录", "账号密码登录"],
"用例标题": "输入正确账号密码登录成功",
"优先级": "P0",
"需求ID": "REQ-001",
"设计方法": ["ST"],
"前置条件": "用户已注册账号,且处于未登录状态",
"步骤": [
{"操作": "1. 打开登录页面", "预期": "1. 显示账号、密码输入框和登录按钮"},
{"操作": "2. 输入正确的账号和密码", "预期": "2. 输入内容正常显示,密码为密文"},
{"操作": "3. 点击登录按钮", "预期": "3. 登录成功,跳转到首页"}
],
"标签": "C端"
}
标签取值规则:
tag只适用于PC端、适用端:APP),直接读取该值写入标签,无需询问用户。标签 字段,严禁对用户答案做任何翻译、展开或同义替换(例如:用户填 C端 就写 C端,不得改为 PC, APP;用户填 3 就写 C端,不得改为别的)。# 时间戳格式:YYYYmmddHHMMSS
TIMESTAMP=$(date +%Y%m%d%H%M%S)
mkdir -p "${SKILL_ROOT}/tmp"
# 先将用例 JSON 写入临时文件
cat > "${SKILL_ROOT}/tmp/cases_${TIMESTAMP}.json" << 'EOF'
[{...}]
EOF
# 再生成 XMind
python3 "${SKILL_ROOT}/scripts/generate_xmind.py" \
--title "项目名称" \
--output "test-docs/testcases_${TIMESTAMP}.xmind" \
-f "${SKILL_ROOT}/tmp/cases_${TIMESTAMP}.json"
# 初始化
python3 "${SKILL_ROOT}/scripts/memory_manager.py" \
--action init \
--project "${SKILL_ROOT}"
# 记录本次生成历史(Phase 4 使用)
python3 "${SKILL_ROOT}/scripts/memory_manager.py" \
--action add-record \
--project "${SKILL_ROOT}" \
--data '{"type":"test_case","source":"requirements/xxx.md","output":"test-docs/xxx.xmind","case_count":40,"coverage_rate":"100%"}'
完整学习规则见 LEARNING-RULES.md
越用越准的核心机制:
写入端(Phase 4/5) 读取端(Phase 2)
───────────────────── ─────────────────────
生成历史 ───→ generation-history.json ──→ 优先级基线 + 遗漏场景补充
歧义决策 ───→ ambiguity-decisions.json ─→ 相似歧义自动复用
新术语 ───→ terminology.json ────────→ 术语统一 + 缩写展开
用户偏好 ───→ user-preferences.json ────→ 标签/粒度/风格自动应用
用户反馈 ───→ 分发到以上各文件 ──────────→ 下次生成自动避免相同问题
记忆命令:"更新术语表" / "清除记忆" / "查看偏好" → 调用 memory_manager.py 对应 action。
<时间戳> 必须使用 YYYYmmddHHMMSS(14 位),不得使用仅日期(8 位)格式.memory 文件夹应加入 .gitignoretmp/ 中已有的 JSON 文件跳过生成步骤