How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-assistant:test-plannersonnetThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> 分析需求、挖掘复杂场景、设计测试用例。支持 TDD 流程。
分析需求、挖掘复杂场景、设计测试用例。支持 TDD 流程。
测试用例质量 = 需求分析的深度
这是最关键的一步,挖掘需求的"深度"和"广度"
查找相关文档:
- docs/intent/<task>-intent.md
- docs/requirements/<task>.md
- docs/plans/<task>-plan.md
| 要素 | 问题 |
|---|---|
| 核心功能 | 这个功能最基本的作用是什么? |
| 用户角色 | 有哪些用户类型?不同角色权限? |
| 使用场景 | 用户在什么情况下会用这个功能? |
| 数据流转 | 数据从哪来到哪去? |
| 依赖关系 | 这个功能依赖哪些其他功能? |
不要只问"功能能跑吗",要问"功能在各种情况下都能跑吗"
| 场景类型 | 问题 |
|---|---|
| 正常场景 | 标准操作流程能正常工作吗? |
| 异常输入 | 无效输入、空值、格式错误怎么处理的? |
| 异常环境 | 网络断开、服务超时、并发请求会怎样? |
| 边界条件 | 极值、空数据、首位特殊情况? |
| 复杂交互 | 多步骤、多用户、长时间运行? |
| 中断恢复 | 中断后能继续吗?状态丢失? |
以"对话功能"为例:
| 维度 | 正常 | 异常 | 边界 | 复杂 |
|---|---|---|---|---|
| 单轮对话 | 用户说"你好"→回复 | 输入为空? | 超长输入? | - |
| 多轮对话 | 连续对话→上下文保持 | 中断后继续? | 对话过长? | 多轮上下文 |
| 并发 | - | 多用户同时对话? | - | 多用户多轮 |
基于需求分析结果,设计覆盖所有场景的测试:
| 场景类型 | 场景描述 | 测试优先级 | 备注 |
|----------|----------|------------|------|
| 正常-核心 | 核心功能正常工作 | P0 | 必须通过 |
| 异常-输入 | 无效输入处理 | P1 | 不崩溃 |
| 异常-环境 | 网络异常处理 | P1 | 不崩溃 |
| 边界-数据 | 边界数据处理 | P2 | 正确处理 |
| 复杂-交互 | 多步骤流程 | P2 | 状态正确 |
| 复杂-并发 | 多用户并发 | P3 | 数据一致 |
正常场景(P0):
- 用户发送消息 → 收到回复
- 用户发送图片 → 收到回复
异常场景(P1):
- 用户发送空消息 → 提示不能为空
- 用户发送敏感词 → 正确拦截/处理
- 网络断开 → 提示网络异常
边界场景(P2):
- 用户发送超长消息 → 正确截断/处理
- 用户发送特殊字符 → 正确转义
复杂场景(P2):
- 用户连续发送10条消息 → 上下文保持正确
- 用户中断5分钟后继续 → 能接着上下文
- 用户A和用户B同时对话 → 各自上下文独立
并发场景(P3):
- 100个用户同时发送消息 → 服务正常响应
- 用户快速连续点击发送 → 防止重复提交
## 测试计划:[功能名称]
### 需求分析摘要
- 核心功能:...
- 复杂场景:...
### 测试场景矩阵
| ID | 场景类型 | 场景描述 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|----|----------|----------|----------|----------|----------|--------|
| TC001 | 正常-核心 | 用户发送消息收到回复 | 登录状态 | 1. 打开对话页 2. 输入消息 3. 发送 | 收到回复 | P0 |
| TC002 | 异常-输入 | 空消息处理 | 登录状态 | 1. 打开对话页 2. 不输入直接发送 | 提示不能为空 | P1 |
...
### 测试数据准备
| 数据 | 值 | 用途 |
|------|-----|------|
| 正常消息 | "你好" | 正常场景 |
| 空消息 | "" | 异常场景 |
| 超长消息 | 长度10000字符 | 边界场景 |
| 敏感词 | "xxx" | 异常场景 |
根据需求,可以生成 Jest/Vitest/Playwright 测试代码:
// 对话功能测试示例
describe('对话功能', () => {
describe('正常场景', () => {
test('用户发送消息收到回复', async () => {
const response = await sendMessage('你好');
expect(response.reply).toBeDefined();
});
});
describe('异常场景', () => {
test('空消息提示不能为空', async () => {
const response = await sendMessage('');
expect(response.error).toContain('不能为空');
});
test('敏感词被拦截', async () => {
const response = await sendMessage('敏感词');
expect(response.blocked).toBe(true);
});
});
describe('复杂场景', () => {
test('多轮对话上下文保持', async () => {
await sendMessage('你好');
await sendMessage('你是谁');
const response = await sendMessage('刚才我说什么了');
expect(response.context).toContain('你是谁');
});
});
});
docs/
├── plans/
│ └── <task>-test-plan.md # 测试计划文档
└── tests/
└── <task>.test.ts # 可执行测试代码(可选)
1. 需求分析 + 场景挖掘(test-planner)
↓
2. 生成测试用例 + 测试代码
↓
3. 运行测试(失败,红色)
↓
4. 开发功能
↓
5. 运行测试(通过,绿色)
↓
6. 重构
1. test-planner 分析"用户登录"需求
2. 挖掘复杂场景:并发登录、异常处理、Session 过期
3. 生成测试用例 + 测试代码
4. 运行测试 → 失败(功能未实现)
5. executor 实现登录功能
6. 运行测试 → 通过
7. reviewer 审查代码
docs/plans/YYYY-MM-DD-[feature]-test-plan.md
流程:
npx claudepluginhub walker-hzx/ai-assistantPerforms test analysis and design using MFQ&PPDCS methodology and TCON black-box test case design. Generates test-analysis.md and e2e-test.md from requirements specifications.
Creates system-level or epic-level test plans. Activates on phrases like 'lets design test plan' or 'I want to create test strategy'. Ideal for high-level testing strategy design.
Design systematic test cases covering valid inputs, invalid inputs, and edge cases. Use when creating manual test suites.