@zhouhao4221/devflow-skills 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +57 -235
  2. package/install.js +406 -116
  3. package/package.json +2 -1
  4. package/plugins/api/skills/api/SKILL.md +102 -0
  5. package/plugins/api/skills/api-field-mapper/SKILL.md +95 -0
  6. package/plugins/api/skills/config/SKILL.md +140 -0
  7. package/plugins/api/skills/gen/SKILL.md +345 -0
  8. package/plugins/api/skills/help/SKILL.md +121 -0
  9. package/plugins/api/skills/import/SKILL.md +95 -0
  10. package/plugins/api/skills/map/SKILL.md +152 -0
  11. package/plugins/api/skills/search/SKILL.md +95 -0
  12. package/plugins/diag/skills/audit/SKILL.md +103 -0
  13. package/plugins/diag/skills/diag/SKILL.md +41 -0
  14. package/plugins/diag/skills/diagnose/SKILL.md +167 -0
  15. package/plugins/diag/skills/init/SKILL.md +142 -0
  16. package/plugins/diag/skills/stack-analyzer/SKILL.md +150 -0
  17. package/plugins/pm/skills/ask/SKILL.md +89 -0
  18. package/plugins/pm/skills/brief/SKILL.md +95 -0
  19. package/plugins/pm/skills/export/SKILL.md +93 -0
  20. package/plugins/pm/skills/help/SKILL.md +257 -0
  21. package/plugins/pm/skills/milestone/SKILL.md +102 -0
  22. package/plugins/pm/skills/monthly/SKILL.md +111 -0
  23. package/plugins/pm/skills/plan/SKILL.md +96 -0
  24. package/plugins/pm/skills/pm/SKILL.md +174 -0
  25. package/plugins/pm/skills/progress/SKILL.md +113 -0
  26. package/plugins/pm/skills/report-generator/SKILL.md +104 -0
  27. package/plugins/pm/skills/risk/SKILL.md +223 -0
  28. package/plugins/pm/skills/standup/SKILL.md +96 -0
  29. package/plugins/pm/skills/stats/SKILL.md +158 -0
  30. package/plugins/pm/skills/weekly/SKILL.md +157 -0
  31. package/plugins/req/skills/branch/SKILL.md +447 -0
  32. package/plugins/req/skills/cache/SKILL.md +232 -0
  33. package/plugins/req/skills/changelog/SKILL.md +187 -0
  34. package/plugins/req/skills/changelog-generator/SKILL.md +106 -0
  35. package/plugins/req/skills/code-impact-analyzer/SKILL.md +48 -0
  36. package/plugins/req/skills/commit/SKILL.md +308 -0
  37. package/plugins/req/skills/dev/SKILL.md +229 -0
  38. package/plugins/req/skills/dev-guide/SKILL.md +530 -0
  39. package/plugins/req/skills/do/SKILL.md +191 -0
  40. package/plugins/req/skills/done/SKILL.md +95 -0
  41. package/plugins/req/skills/edit/SKILL.md +187 -0
  42. package/plugins/req/skills/fix/SKILL.md +300 -0
  43. package/plugins/req/skills/help/SKILL.md +136 -0
  44. package/plugins/req/skills/init/SKILL.md +505 -0
  45. package/plugins/req/skills/issue/SKILL.md +237 -0
  46. package/plugins/req/skills/issue-guide/SKILL.md +125 -0
  47. package/plugins/req/skills/migrate/SKILL.md +128 -0
  48. package/plugins/req/skills/modules/SKILL.md +195 -0
  49. package/plugins/req/skills/natural-language-dispatcher/SKILL.md +545 -0
  50. package/plugins/req/skills/new/SKILL.md +172 -0
  51. package/plugins/req/skills/new-quick/SKILL.md +246 -0
  52. package/plugins/req/skills/pr/SKILL.md +157 -0
  53. package/plugins/req/skills/prd/SKILL.md +187 -0
  54. package/plugins/req/skills/prd-analyzer/SKILL.md +131 -0
  55. package/plugins/req/skills/prd-edit/SKILL.md +201 -0
  56. package/plugins/req/skills/projects/SKILL.md +115 -0
  57. package/plugins/req/skills/quick-fix-guide/SKILL.md +51 -0
  58. package/plugins/req/skills/release/SKILL.md +300 -0
  59. package/plugins/req/skills/release-rationale/SKILL.md +213 -0
  60. package/plugins/req/skills/req/SKILL.md +173 -0
  61. package/plugins/req/skills/requirement-analyzer/SKILL.md +274 -0
  62. package/plugins/req/skills/review/SKILL.md +201 -0
  63. package/plugins/req/skills/review-pr/SKILL.md +699 -0
  64. package/plugins/req/skills/show/SKILL.md +302 -0
  65. package/plugins/req/skills/specs/SKILL.md +99 -0
  66. package/plugins/req/skills/split/SKILL.md +164 -0
  67. package/plugins/req/skills/status/SKILL.md +184 -0
  68. package/plugins/req/skills/test/SKILL.md +431 -0
  69. package/plugins/req/skills/test-guide/SKILL.md +304 -0
  70. package/plugins/req/skills/test_new/SKILL.md +417 -0
  71. package/plugins/req/skills/test_regression/SKILL.md +298 -0
  72. package/plugins/req/skills/update/SKILL.md +131 -0
  73. package/plugins/req/skills/update-template/SKILL.md +203 -0
  74. package/plugins/req/skills/upgrade/SKILL.md +178 -0
  75. package/plugins/req/skills/use/SKILL.md +158 -0
  76. package/plugins/req/skills/version-bumper/SKILL.md +113 -0
  77. package/plugins/uat/skills/bug/SKILL.md +153 -0
  78. package/plugins/uat/skills/init/SKILL.md +88 -0
  79. package/plugins/uat/skills/new/SKILL.md +131 -0
  80. package/plugins/uat/skills/report/SKILL.md +48 -0
  81. package/plugins/uat/skills/run/SKILL.md +78 -0
  82. package/plugins/uat/skills/uat/SKILL.md +64 -0
  83. package/plugins/uat/skills/uat-executor/SKILL.md +299 -0
@@ -0,0 +1,304 @@
1
+ ---
2
+ name: test-guide
3
+ description: |
4
+ 测试引导助手。在执行 /req:test、/req:test_regression 或 /req:test_new 命令时触发。
5
+ 支持运行已有自动化测试和创建新测试用例。
6
+ ---
7
+
8
+ # 测试引导助手
9
+
10
+ 测试分为两大类型,通过不同命令触发:
11
+
12
+ | 命令 | 用途 | 说明 |
13
+ |-----|------|------|
14
+ | `/req:test_regression` | 运行已有测试 | 执行现有自动化测试用例,回归验证 |
15
+ | `/req:test_new` | 创建新测试 | 为新功能编写 UT/API/E2E 测试用例 |
16
+ | `/req:test` | 综合测试 | 先运行回归,再补充新测试 |
17
+
18
+ > **重要**:本 skill 不内置任何项目测试细节。测试目录、测试框架、运行命令、
19
+ > 代码示例均从项目 CLAUDE.md 的「测试规范」章节读取。
20
+ > 如 CLAUDE.md 缺少测试规范,会发出警告并建议补充。
21
+
22
+ ---
23
+
24
+ ## 前置准备:读取项目测试配置
25
+
26
+ Read `docs/prompt/architecture.md`,从「测试规范」章节获取测试目录、框架、运行命令。
27
+
28
+ - 文件存在 → 读取,静默注入
29
+ - 文件不存在 → 回退从 CLAUDE.md 读取(兼容旧项目)
30
+
31
+ 从项目 CLAUDE.md 的「测试规范」章节获取(architecture.md 不存在时的兜底):
32
+
33
+ | 配置项 | 用途 | 示例 |
34
+ |--------|------|------|
35
+ | UT 位置 | 定位已有测试文件 | `*_test.go` / `*.test.ts` |
36
+ | UT 框架 | 生成测试代码风格 | go test / JUnit / Vitest |
37
+ | API 测试位置 | 定位 API 测试 | `tests/api/` |
38
+ | E2E 测试位置 | 定位 E2E 测试 | `tests/e2e/` |
39
+ | E2E 框架 | 生成 E2E 代码 | Playwright / Cypress |
40
+ | 运行命令 | 执行测试 | `go test ./...` / `npm test` |
41
+ | 测试环境 | 环境准备 | docker-compose / testcontainers |
42
+
43
+ **读取领域规约(Specs)**:
44
+
45
+ 读取 CLAUDE.md 后,检查项目是否存在领域规约:
46
+
47
+ - **primary 仓库**:扫描 `docs/requirements/specs/` 目录,读取所有 `.md` 文件
48
+ - **readonly 仓库**:读取 `~/.claude-requirements/projects/<requirementProject>/specs/`(`requirementProject` 取自 `.claude/settings.local.json`)
49
+
50
+ 目录存在且有文件 → 全部读取,作为测试约束注入上下文,不打印提示。
51
+ 目录不存在或为空 → 静默跳过。
52
+
53
+ ---
54
+
55
+ **CLAUDE.md 缺少测试规范时**:
56
+
57
+ ```
58
+ ⚠️ CLAUDE.md 中未检测到测试规范
59
+
60
+ /req:test 需要以下信息来定位和生成测试:
61
+ - 测试文件位置和命名规则
62
+ - 测试框架和运行命令
63
+ - 测试环境搭建方式
64
+
65
+ 💡 添加方式:/req:init <project> --reinit
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 一、回归测试 (`/req:test_regression`)
71
+
72
+ 运行项目中已存在的自动化测试用例。
73
+
74
+ ### 测试类型识别
75
+
76
+ 根据 CLAUDE.md 测试规范自动识别:
77
+
78
+ | 类型 | 识别方式 | 说明 |
79
+ |-----|---------|------|
80
+ | UT | CLAUDE.md 中定义的 UT 位置和文件模式 | 单元测试 |
81
+ | API | CLAUDE.md 中定义的 API 测试位置 | 集成测试 |
82
+ | E2E | CLAUDE.md 中定义的 E2E 测试位置 | 端到端测试 |
83
+
84
+ ### 执行流程
85
+
86
+ ```
87
+ 1. 读取 CLAUDE.md 测试规范
88
+ 2. 识别测试范围(全量/增量/指定模块)
89
+ 3. 按 CLAUDE.md 中的运行命令执行测试
90
+ 4. 收集测试结果
91
+ 5. 生成测试报告
92
+ ```
93
+
94
+ ### 测试范围选项
95
+
96
+ ```bash
97
+ /req:test_regression # 全量回归
98
+ /req:test_regression --changed # 仅测试变更相关
99
+ /req:test_regression --module=xxx # 指定模块
100
+ /req:test_regression --failed # 仅运行上次失败的
101
+ ```
102
+
103
+ ### 结果输出格式
104
+
105
+ ```
106
+ 🔄 执行回归测试...
107
+
108
+ 📦 单元测试
109
+ ├── <测试文件1> ✅ X/X 通过
110
+ ├── <测试文件2> ✅ X/X 通过
111
+ └── <测试文件3> ❌ X/X 通过
112
+
113
+ 📡 API 测试
114
+ ├── <接口1> ✅ 通过
115
+ └── <接口2> ❌ 失败 - 原因
116
+
117
+ 📊 回归测试结果:XX/XX 通过 (XX.X%)
118
+
119
+ ❌ 失败用例:
120
+ 1. <失败用例名> - <失败原因>
121
+
122
+ 💡 下一步:
123
+ - 修复问题后重新测试:/req:test_regression --failed
124
+ ```
125
+
126
+ ---
127
+
128
+ ## 二、创建新测试 (`/req:test_new`)
129
+
130
+ 为新开发的功能创建自动化测试用例。
131
+
132
+ ### 测试金字塔
133
+
134
+ ```
135
+ ┌─────────┐
136
+ │ E2E │ 少量关键路径
137
+ ├─────────┤
138
+ │ API │ 中等数量,覆盖接口
139
+ ├─────────┤
140
+ │ UT │ 大量,覆盖业务逻辑
141
+ └─────────┘
142
+ ```
143
+
144
+ ### 2.1 单元测试 (UT)
145
+
146
+ **目标**:测试业务逻辑层,不依赖外部服务
147
+
148
+ **生成规则**:
149
+ 1. 读取 CLAUDE.md 中的 UT 规范(框架、命名、目录)
150
+ 2. 按项目的测试框架风格生成代码
151
+ 3. 遵循项目的命名约定和目录结构
152
+
153
+ **测试场景覆盖**:
154
+ - 正常流程(Happy Path)
155
+ - 边界条件(空值、最大/最小值)
156
+ - 异常场景(重复、不存在、无权限)
157
+ - 业务规则验证
158
+
159
+ **UT 生成流程**:
160
+
161
+ ```
162
+ 1. 分析需求文档中的业务规则
163
+ 2. 从 CLAUDE.md 读取分层架构,识别业务层需要测试的方法
164
+ 3. 为每个方法生成测试用例(按项目测试框架风格)
165
+ 4. 包含正常和异常场景
166
+ 5. 按项目规范生成 mock 依赖
167
+ ```
168
+
169
+ ### 2.2 API 测试
170
+
171
+ **目标**:验证接口契约、参数校验、错误码
172
+
173
+ **生成规则**:
174
+ 1. 从需求文档提取接口需求
175
+ 2. 按 CLAUDE.md 中的 API 测试规范生成代码
176
+ 3. 遵循项目的测试数据管理方式
177
+
178
+ **API 测试要点**:
179
+
180
+ | 测试类型 | 验证内容 |
181
+ |---------|---------|
182
+ | 参数校验 | 必填、格式、范围、类型 |
183
+ | 权限控制 | 认证、授权、租户隔离 |
184
+ | 错误码 | 统一错误码格式和语义 |
185
+ | 响应格式 | 结构、字段完整性 |
186
+ | 边界场景 | 空列表、分页边界、并发 |
187
+
188
+ ### 2.3 E2E 测试
189
+
190
+ **目标**:验证完整用户流程,端到端场景
191
+
192
+ **适用场景**:
193
+ - 核心业务流程
194
+ - 跨模块交互
195
+ - 关键用户旅程
196
+
197
+ **生成规则**:
198
+ 1. 从 CLAUDE.md 读取 E2E 框架和配置
199
+ 2. 从需求文档提取用户故事和关键流程
200
+ 3. 按项目的 E2E 框架风格生成测试代码
201
+ 4. 包含正常和异常场景
202
+
203
+ ---
204
+
205
+ ## 三、测试创建工作流
206
+
207
+ 执行 `/req:test_new` 时的完整流程:
208
+
209
+ ### 步骤 1:分析需求
210
+
211
+ ```
212
+ 📋 分析需求文档...
213
+
214
+ 需求:REQ-XXX 需求标题
215
+ 涉及功能:
216
+ - [从功能清单提取]
217
+
218
+ 识别到的测试点:
219
+ - 业务层:X 个方法需要 UT
220
+ - API:X 个接口需要测试
221
+ - E2E:X 个核心流程
222
+ ```
223
+
224
+ ### 步骤 2:选择测试类型
225
+
226
+ ```
227
+ 请选择要创建的测试类型:
228
+
229
+ [ ] 单元测试 (UT) - 推荐:业务逻辑层
230
+ [ ] API 测试 - 推荐:已有接口定义
231
+ [ ] E2E 测试 - 可选:关键流程
232
+ [ ] 全部
233
+
234
+ 输入选择 (1/2/3/all):
235
+ ```
236
+
237
+ ### 步骤 3:生成测试代码
238
+
239
+ 根据选择,按 CLAUDE.md 中的测试规范生成对应测试文件。
240
+
241
+ ```
242
+ 📝 生成测试文件...
243
+
244
+ ✅ <测试文件1>
245
+ - <测试用例1>
246
+ - <测试用例2>
247
+
248
+ ✅ <测试文件2>
249
+ - <测试用例3>
250
+ - <测试用例4>
251
+
252
+ 📊 共生成 X 个测试文件,X 个测试用例
253
+ ```
254
+
255
+ ### 步骤 4:运行验证
256
+
257
+ 使用 CLAUDE.md 中定义的测试运行命令执行新创建的测试。
258
+
259
+ ---
260
+
261
+ ## 四、测试最佳实践
262
+
263
+ ### 命名规范
264
+
265
+ > 从 CLAUDE.md 测试规范读取项目具体的命名约定。通用原则:
266
+
267
+ | 类型 | 原则 |
268
+ |-----|------|
269
+ | UT 函数 | 被测对象_方法_场景(语言惯例命名) |
270
+ | API 测试 | 接口_场景 |
271
+ | E2E 测试 | 描述性名称,体现用户故事 |
272
+
273
+ ### Mock 使用原则
274
+
275
+ - UT:Mock 外部依赖(数据层、第三方服务)
276
+ - API:Mock 外部服务,使用真实或测试数据库
277
+ - E2E:尽量使用真实环境
278
+
279
+ ### 覆盖率目标
280
+
281
+ | 测试类型 | 建议覆盖率 |
282
+ |---------|-----------|
283
+ | UT (业务层) | >= 80% |
284
+ | API | 100% 接口覆盖 |
285
+ | E2E | 核心流程 100% |
286
+
287
+ ---
288
+
289
+ ## 五、与需求关联
290
+
291
+ 测试完成后更新需求文档:
292
+
293
+ ```markdown
294
+ ## 测试覆盖
295
+
296
+ | 类型 | 文件 | 用例数 | 覆盖率 |
297
+ |-----|------|-------|-------|
298
+ | UT | <测试文件> | X | XX% |
299
+ | API | <测试文件> | X | XX% |
300
+ | E2E | <测试文件> | X | - |
301
+
302
+ 最后测试时间:YYYY-MM-DD
303
+ 测试结果:✅ 全部通过 / ❌ X 个失败
304
+ ```
@@ -0,0 +1,417 @@
1
+ ---
2
+ name: test_new
3
+ description: |
4
+ 创建测试 - 为新功能编写自动化测试用例或手动测试用例文档
5
+ ---
6
+
7
+ > **重要**:本命令的测试文件位置、运行命令、代码示例均从项目 CLAUDE.md 的「测试规范」章节读取,不内置任何项目细节。
8
+
9
+ # 创建测试
10
+
11
+ 为新开发的功能创建自动化测试用例,包括单元测试、API 测试和 E2E 测试。
12
+
13
+ > 存储路径和缓存同步规则见 [_storage.md](./_storage.md)
14
+
15
+ ## 命令格式
16
+
17
+ ```
18
+ /req:test_new [REQ-XXX] [--type=ut|api|e2e|all]
19
+ ```
20
+
21
+ ### 参数
22
+
23
+ | 参数 | 说明 | 示例 |
24
+ |-----|------|------|
25
+ | `REQ-XXX` | 需求编号(可选) | `/req:test_new REQ-001` |
26
+ | `--type=ut` | 仅创建单元测试 | `/req:test_new --type=ut` |
27
+ | `--type=api` | 仅创建 API 测试 | `/req:test_new --type=api` |
28
+ | `--type=e2e` | 仅创建 E2E 测试 | `/req:test_new --type=e2e` |
29
+ | `--type=all` | 创建所有类型测试 | `/req:test_new --type=all` |
30
+ | `--type=manual` | 生成人工复测用例文档 | `/req:test_new --type=manual` |
31
+ | `--dry-run` | 预览不实际创建 | `/req:test_new --dry-run` |
32
+
33
+ ---
34
+
35
+ ## 执行流程
36
+
37
+ ### 1. 选择需求
38
+
39
+ - 指定编号 → 使用该需求
40
+ - 未指定 → 查找「开发中」或「测试中」的需求
41
+ - 多个候选 → 让用户选择
42
+
43
+ ### 2. 分析需求文档
44
+
45
+ ```
46
+ 分析需求文档...
47
+
48
+ 需求:REQ-001 <需求标题>
49
+ 状态:开发中
50
+
51
+ 功能清单:
52
+ 1. <功能点 1>
53
+ 2. <功能点 2>
54
+ 3. <功能点 3>
55
+
56
+ 涉及文件:
57
+ <source-file-1>
58
+ <source-file-2>
59
+ <source-file-3>
60
+ <source-file-N>
61
+
62
+ 识别测试点:
63
+
64
+
65
+ 类型 测试点 数量
66
+
67
+ UT 业务层方法 N
68
+ API 接口端点 N
69
+ E2E 用户流程 N
70
+
71
+ ```
72
+
73
+ ### 3. 选择测试类型
74
+
75
+ ```
76
+ 请选择要创建的测试类型:
77
+
78
+ [1] 单元测试 (UT)
79
+ - 测试业务层逻辑
80
+ - 使用 Mock 隔离依赖
81
+ - 预计生成 N 个测试用例
82
+
83
+ [2] API 测试
84
+ - 测试接口端点
85
+ - 验证请求/响应/错误码
86
+ - 预计生成 N 个测试文件
87
+
88
+ [3] E2E 测试
89
+ - 测试完整用户流程
90
+ - 端到端场景验证
91
+ - 预计生成 N 个测试文件
92
+
93
+ [4] 全部自动化
94
+
95
+ [5] 手动测试用例文档 (manual)
96
+ - 供测试人员逐条复测
97
+ - 覆盖后端接口 + 前端交互 + 业务规则
98
+ - 生成 docs/test-cases/REQ-XXX-testcases.md
99
+
100
+ 请输入选择 (1/2/3/4/5):
101
+ ```
102
+
103
+ ### 4. 生成单元测试 (UT)
104
+
105
+ #### 4.1 分析被测方法
106
+
107
+ ```
108
+ 分析业务层方法...
109
+
110
+ <source-file>:
111
+ <方法签名 1>
112
+ <方法签名 2>
113
+ <方法签名 3>
114
+ <方法签名 N>
115
+ ```
116
+
117
+ #### 4.2 生成测试用例
118
+
119
+ 根据 CLAUDE.md 中定义的测试框架和规范,生成对应的测试代码。
120
+
121
+ 测试用例遵循 **Arrange-Act-Assert** 模式:
122
+
123
+ ```
124
+ 生成文件:<CLAUDE.md中定义的测试文件路径>
125
+
126
+ 测试用例列表:
127
+ <TestCase_Method1_Success> - 正常流程
128
+ <TestCase_Method1_ErrorCase> - 异常场景
129
+ <TestCase_Method2_ValidInput> - 输入校验
130
+ <TestCase_Method2_InvalidInput> - 边界条件
131
+ <TestCase_Method3_NormalCase> - 正常流程
132
+ <TestCase_Method3_EdgeCase> - 边界条件
133
+
134
+ 每个测试用例结构:
135
+ 1. Arrange - 准备数据和 Mock 依赖
136
+ 2. Act - 执行被测方法
137
+ 3. Assert - 验证结果
138
+ ```
139
+
140
+ #### 4.3 生成 Mock 文件(如需要)
141
+
142
+ ```
143
+ 按 CLAUDE.md 测试规范生成 Mock 文件...
144
+
145
+ <CLAUDE.md中定义的Mock生成命令>
146
+
147
+ ✅ 生成:<mock-file-path>
148
+ ```
149
+
150
+ ### 5. 生成 API 测试
151
+
152
+ #### 5.1 提取 API 定义
153
+
154
+ ```
155
+ 提取 API 定义...
156
+
157
+ 从需求文档提取:
158
+ <HTTP_METHOD> <endpoint-1> <描述>
159
+ <HTTP_METHOD> <endpoint-2> <描述>
160
+ <HTTP_METHOD> <endpoint-3> <描述>
161
+ ```
162
+
163
+ #### 5.2 生成测试代码
164
+
165
+ 根据 CLAUDE.md 中定义的 API 测试框架生成测试代码。
166
+
167
+ 每个接口的测试覆盖:
168
+
169
+ ```
170
+ 生成文件:<CLAUDE.md中定义的API测试文件路径>
171
+
172
+ <endpoint-1> 测试用例:
173
+ 正常请求 - 完整参数 → 期望成功响应
174
+ 正常请求 - 可选参数缺省 → 期望成功响应(默认值)
175
+ 异常请求 - 缺少必填字段 → 期望参数校验错误
176
+ 异常请求 - 业务规则冲突 → 期望业务错误码
177
+ 异常请求 - 无权限 → 期望权限错误
178
+
179
+ 采用表驱动测试模式,每组包含:
180
+ - name: 场景描述
181
+ - input: 请求参数
182
+ - wantStatus: 期望状态码
183
+ - wantBody: 期望响应内容(可选)
184
+ ```
185
+
186
+ ### 6. 生成 E2E 测试
187
+
188
+ **前提条件**:E2E 测试需要完整的测试环境
189
+
190
+ ```
191
+ ⚠️ E2E 测试需要启动测试环境:
192
+ - 依赖服务(数据库、缓存等)
193
+ - 后端服务(本地)
194
+ - 前端服务(本地)
195
+ ```
196
+
197
+ #### 6.1 识别用户流程
198
+
199
+ ```
200
+ 识别用户流程...
201
+
202
+ 核心流程:<功能名称>
203
+ 1. <用户操作步骤 1>
204
+ 2. <用户操作步骤 2>
205
+ 3. <用户操作步骤 3>
206
+ 4. <验证步骤>
207
+ ```
208
+
209
+ #### 6.2 生成测试代码
210
+
211
+ 根据 CLAUDE.md 中定义的 E2E 测试框架生成测试代码。
212
+
213
+ ```
214
+ 生成文件:<CLAUDE.md中定义的E2E测试文件路径>
215
+
216
+ 测试场景:
217
+ <场景 1>: <用户流程描述>
218
+ 前置:<数据准备 / 登录>
219
+ 操作:<页面交互步骤>
220
+ 断言:<预期结果>
221
+ <场景 2>: <边界条件描述>
222
+ 前置:<特定状态准备>
223
+ 操作:<触发边界条件>
224
+ 断言:<预期错误提示>
225
+ <场景 3>: <修改流程描述>
226
+ 前置:<已有数据>
227
+ 操作:<修改操作>
228
+ 断言:<修改后状态>
229
+ ```
230
+
231
+ ### 7. 生成手动测试用例文档 (manual)
232
+
233
+ > 适用场景:需要给测试人员一份可逐条执行的复测清单,前后端项目均适用。
234
+
235
+ #### 7.1 分析信息源
236
+
237
+ 同时读取两处:
238
+
239
+ ```
240
+ 读取需求文档...
241
+ 功能清单(待验证的功能点)
242
+ 业务规则(边界条件、约束)
243
+ 使用场景(正常流程 + 异常流程)
244
+ 测试要点(已有的验收标准)
245
+
246
+ 读取源代码...
247
+ 后端:handler/controller → 提取接口路径、参数、返回码
248
+ 后端:service/logic → 提取分支逻辑、边界判断
249
+ 前端:页面/组件 → 提取交互逻辑、表单校验、跳转规则
250
+ ```
251
+
252
+ 源码补充需求文档未覆盖的细节(如实际返回的错误码、字段校验规则)。
253
+
254
+ #### 7.2 生成用例
255
+
256
+ 按模块分组,每条用例包含:编号、场景、前置条件、操作步骤、预期结果、实际结果(空)、通过(空)。
257
+
258
+ **后端接口** — 每个接口至少覆盖:正常路径、参数缺失/非法、业务规则冲突、权限不足。
259
+
260
+ **前端交互** — 每个页面/功能至少覆盖:正常操作流程、表单校验、异常提示、边界状态(空数据、超长文本、加载失败等)。
261
+
262
+ **业务规则** — 需求文档中的每条业务规则对应至少一条用例。
263
+
264
+ 输出格式:
265
+
266
+ ````
267
+ 生成手动测试用例...
268
+
269
+ 生成文件:docs/test-cases/REQ-XXX-testcases.md
270
+
271
+ # REQ-XXX <需求标题> · 手动测试用例
272
+
273
+ > 需求:[REQ-XXX](../../requirements/active/REQ-XXX-xxx.md)
274
+ > 生成日期:YYYY-MM-DD
275
+ > 状态:待测试
276
+
277
+ ---
278
+
279
+ ## 后端接口
280
+
281
+ | 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 实际结果 | 通过 |
282
+ |-----|------|---------|---------|---------|---------|-----|
283
+ | TC-001 | <接口名>-正常 | <前置数据/权限> | `<HTTP_METHOD> <path>`<br>参数:`{...}` | HTTP <状态码>,返回 `{...}` | | |
284
+ | TC-002 | <接口名>-缺少必填字段 | - | 省略字段 `<field>` | HTTP 400,`message` 含"<字段名>不能为空" | | |
285
+ | TC-003 | <接口名>-无权限 | 未登录 / 低权限账号 | 发起请求 | HTTP 401 / 403 | | |
286
+ | TC-004 | <接口名>-业务规则冲突 | <冲突前置条件> | <触发冲突的参数> | HTTP 4XX,业务错误码 `<code>` | | |
287
+
288
+ ---
289
+
290
+ ## 前端交互
291
+
292
+ | 编号 | 页面/功能 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 实际结果 | 通过 |
293
+ |-----|---------|------|---------|---------|---------|---------|-----|
294
+ | TC-101 | <页面名> | 正常流程 | <登录状态/数据> | 1. <操作1><br>2. <操作2><br>3. <操作3> | <可观测的页面状态> | | |
295
+ | TC-102 | <页面名> | 表单校验-<字段> | - | 1. 不填 `<字段>`<br>2. 点击提交 | 字段下方显示"<校验提示>" | | |
296
+ | TC-103 | <页面名> | 空数据状态 | 无相关数据 | 进入页面 | 显示空状态占位 | | |
297
+ | TC-104 | <页面名> | 操作成功反馈 | <正常前置> | <完成操作> | 显示成功提示,数据刷新 | | |
298
+
299
+ ---
300
+
301
+ ## 业务规则验证
302
+
303
+ | 编号 | 规则 | 场景 | 操作 | 预期结果 | 实际结果 | 通过 |
304
+ |-----|------|------|------|---------|---------|-----|
305
+ | TC-201 | <业务规则描述> | <触发场景> | <操作步骤> | <预期约束生效表现> | | |
306
+
307
+ ---
308
+
309
+ ## 测试执行记录
310
+
311
+ - **执行人**:
312
+ - **执行日期**:
313
+ - **测试环境**:
314
+ - **总计**:N 条,通过 0 条,失败 0 条,跳过 0 条
315
+ ````
316
+
317
+ #### 7.3 更新需求文档
318
+
319
+ 在需求文档「六、测试要点」末尾追加引用行:
320
+
321
+ ```markdown
322
+ 手动测试用例:[docs/test-cases/REQ-XXX-testcases.md](../../../test-cases/REQ-XXX-testcases.md)(生成于 YYYY-MM-DD)
323
+ ```
324
+
325
+ ---
326
+
327
+ ### 8. 测试文件汇总
328
+
329
+ ```
330
+ 测试文件生成完成
331
+
332
+
333
+ 类型 文件 用例数
334
+
335
+ UT <ut-test-file> N
336
+ API <api-test-file> N
337
+ E2E <e2e-test-file> N
338
+ 手动用例 docs/test-cases/REQ-XXX-testcases.md N
339
+
340
+ 合计 N 个文件 N
341
+
342
+
343
+ ✅ 已生成 Mock 文件(如需要)
344
+ ✅ 已添加测试数据 fixtures(如需要)
345
+ ```
346
+
347
+ ### 9. 运行验证
348
+
349
+ ```
350
+ 运行新创建的测试...
351
+
352
+ <CLAUDE.md中定义的UT运行命令> <ut-test-file>
353
+ <TestCase_1> --- PASS
354
+ <TestCase_2> --- PASS
355
+ ...
356
+
357
+ <CLAUDE.md中定义的API测试运行命令> <api-test-file>
358
+ <TestCase_API_1> --- PASS
359
+ <TestCase_API_2> --- PASS
360
+ ...
361
+
362
+ 验证结果:N/N 通过
363
+
364
+ 下一步:
365
+ - 运行全量回归:/req:test_regression
366
+ - 继续开发:/req:dev
367
+ - 完成需求:/req:done
368
+ ```
369
+
370
+ ### 10. 更新需求文档
371
+
372
+ 自动更新需求文档的测试覆盖章节:
373
+
374
+ ```markdown
375
+ ## 测试覆盖
376
+
377
+ | 类型 | 文件 | 用例数 | 覆盖率 |
378
+ |-----|------|-------|-------|
379
+ | UT | <ut-test-file> | N | XX% |
380
+ | API | <api-test-file> | N | XX% |
381
+ | E2E | <e2e-test-file> | N | - |
382
+
383
+ 创建时间:<date>
384
+ 最后运行:<date> ✅ 全部通过
385
+ ```
386
+
387
+ ---
388
+
389
+ ## 测试模板
390
+
391
+ 测试模板从项目 CLAUDE.md 的「测试规范」章节读取,包括:
392
+
393
+ ### UT 模板
394
+
395
+ - 测试框架、断言库、Mock 工具由 CLAUDE.md 定义
396
+ - 遵循 Arrange-Act-Assert 模式
397
+ - 命名规范:`Test{被测对象}_{方法}_{场景}`
398
+
399
+ ### API 测试模板
400
+
401
+ - 测试框架由 CLAUDE.md 定义
402
+ - 采用表驱动测试模式
403
+ - 覆盖正常路径、异常路径、权限校验
404
+ - 命名规范:`Test{Endpoint}_{场景}`
405
+
406
+ ### E2E 测试模板
407
+
408
+ - E2E 框架由 CLAUDE.md 定义
409
+ - 包含前置数据准备(如登录、数据重置)
410
+ - 模拟真实用户操作流程
411
+ - 验证页面状态和交互结果
412
+
413
+ ---
414
+
415
+ ## 用户输入
416
+
417
+ $ARGUMENTS