skills/naodeng/awesome-qa-skills/test-case-writing

test-case-writing

SKILL.md

测试用例编写(中文版)

英文版: 见技能 test-case-writing-en

提示词见本目录 prompts/test-case-writing.md

何时使用

  • 用户提到「测试用例编写」「test case writing」「用例设计」
  • 需要根据需求设计测试用例
  • 触发示例:「根据以下需求编写测试用例」「设计登录功能的测试用例」

输出格式选项

本技能默认输出为 Markdown(与 Standard-version 模板一致)。若需其他格式,请在需求末尾明确说明:

格式 说明 如何请求(示例)
Markdown 默认,便于阅读与版本管理 无需额外说明
Excel 制表符分隔,可粘贴到 Excel 「请以 Excel 可粘贴的制表符分隔表格输出」
CSV 逗号分隔,首行为表头 「请以 CSV 格式输出」
JSON 便于程序解析 「请以 JSON 形式输出」
TestRail TestRail 导入格式 「请以 TestRail 格式输出」

详细说明与示例见本目录 output-formats.md

如何使用

  1. 打开本目录 prompts/ 下对应提示词文件,复制虚线以下内容。
  2. 附加你的需求与上下文(业务流程、环境、约束、验收标准)。
  3. 若需非 Markdown 输出,在末尾追加 output-formats.md 中的请求句。

参考文件

代码示例 | Code Examples

本技能提供以下真实代码示例:

  1. 测试用例设计模式(计划中) - 完整的测试用例设计示例

    • 等价类划分示例(10+ 个)
    • 边界值分析示例(8+ 个)
    • 决策表测试示例(5+ 个)
    • 状态转换测试示例(3+ 个)
    • 真实项目用例集(50+ 个)
  2. 用例生成工具(即将推出)

  3. 用例质量检查器(即将推出)

更多示例将在后续版本补充。

常见误区 | Common Pitfalls

  • 只测试正常场景 → ✅ 同时覆盖正常、异常、边界场景
  • 用例描述不清晰 → ✅ 使用明确的步骤和预期结果
  • 缺少测试数据 → ✅ 提供具体的测试数据
  • 用例粒度不当 → ✅ 保持适当的粒度,不要太粗或太细
  • 忽略前置条件 → ✅ 明确说明前置条件和环境要求
  • 没有优先级 → ✅ 标记用例优先级(P0/P1/P2/P3)
  • 用例间有依赖 → ✅ 保持用例独立性

最佳实践 | Best Practices

1. 用例结构

标准用例格式

## TC-001: 用例标题

**优先级**: P0 / P1 / P2 / P3
**类型**: 功能 / 界面 / 性能 / 安全 / 兼容性
**前置条件**:
- 条件1
- 条件2

**测试步骤**:
1. 步骤1
2. 步骤2
3. 步骤3

**测试数据**:
- 数据项1: 值
- 数据项2: 值

**预期结果**:
- 结果1
- 结果2

**实际结果**: [执行时填写]
**状态**: Pass / Fail / Blocked / Skip
**备注**: [可选]

2. 测试设计方法

等价类划分

将输入域划分为若干等价类,从每个等价类中选取代表性数据:

示例:年龄输入(有效范围 18-65)

等价类 类型 测试值 预期结果
< 18 无效 10, 17 拒绝
18-65 有效 18, 30, 65 接受
> 65 无效 66, 100 拒绝

边界值分析

测试边界值和边界值附近的值:

示例:年龄输入(有效范围 18-65)

测试值 类型 预期结果
17 下边界-1 拒绝
18 下边界 接受
19 下边界+1 接受
64 上边界-1 接受
65 上边界 接受
66 上边界+1 拒绝

决策表

处理多个条件组合的场景:

示例:登录验证

条件 规则1 规则2 规则3 规则4
用户名正确
密码正确
结果 登录成功 密码错误 用户名错误 都错误

状态转换

测试对象在不同状态间的转换:

[未登录] --登录--> [已登录] --登出--> [未登录]
           |                    |
           +----登录失败---------+

3. 用例优先级

P0(Critical)

  • 核心业务流程
  • 阻塞性问题
  • 必须在每次发布前执行

P1(High)

  • 重要功能
  • 常用场景
  • 应该在每次发布前执行

P2(Medium)

  • 一般功能
  • 非核心场景
  • 可以选择性执行

P3(Low)

  • 边缘场景
  • 不常用功能
  • 时间充裕时执行

4. 用例编写原则

SMART 原则

  • Specific(具体): 步骤和结果明确
  • Measurable(可衡量): 结果可验证
  • Achievable(可实现): 可以实际执行
  • Relevant(相关): 与需求相关
  • Time-bound(有时限): 执行时间合理

3C 原则

  • Clear(清晰): 任何人都能理解
  • Concise(简洁): 不冗余
  • Complete(完整): 包含所有必要信息

5. 覆盖率目标

  • 需求覆盖率: 100%(所有需求都有对应用例)
  • 代码覆盖率: 80%+(自动化测试)
  • 场景覆盖率: 正常、异常、边界都要覆盖
  • 优先级分布: P0(20%) + P1(30%) + P2(30%) + P3(20%)

故障排除 | Troubleshooting

问题1:不知道如何开始编写用例

症状:面对需求文档不知从何下手

解决方案

使用 5W1H 分析法:

  1. What(测什么): 识别功能点
  2. Who(谁用): 识别用户角色
  3. When(何时): 识别触发条件
  4. Where(哪里): 识别使用场景
  5. Why(为何): 理解业务目标
  6. How(如何): 设计测试步骤

示例

## 需求:用户登录功能

### 5W1H 分析

**What**: 
- 用户名密码验证
- 记住我功能
- 忘记密码链接

**Who**:
- 注册用户
- 未注册用户
- 管理员

**When**:
- 首次访问
- Session 过期后
- 主动登出后

**Where**:
- Web 端
- 移动端
- 不同浏览器

**Why**:
- 保护用户数据
- 个性化体验
- 权限控制

**How**:
- 输入用户名密码
- 点击登录按钮
- 验证并跳转

### 测试用例设计

基于以上分析,设计以下用例:
1. 正常登录(P0)
2. 用户名错误(P1)
3. 密码错误(P1)
4. 记住我功能(P2)
5. 忘记密码流程(P2)
...

问题2:用例覆盖不全面

症状:测试后仍发现很多遗漏的场景

解决方案

使用测试覆盖检查清单:

## 测试覆盖检查清单

### 功能维度
- [ ] 正常流程
- [ ] 异常流程
- [ ] 边界条件
- [ ] 错误处理

### 数据维度
- [ ] 有效数据
- [ ] 无效数据
- [ ] 空值/null
- [ ] 特殊字符
- [ ] 超长数据
- [ ] 数据类型错误

### 用户维度
- [ ] 不同角色
- [ ] 不同权限
- [ ] 未登录用户
- [ ] 已登录用户

### 环境维度
- [ ] 不同浏览器
- [ ] 不同操作系统
- [ ] 不同屏幕尺寸
- [ ] 不同网络条件

### 状态维度
- [ ] 初始状态
- [ ] 中间状态
- [ ] 最终状态
- [ ] 异常状态

### 时间维度
- [ ] 首次使用
- [ ] 重复使用
- [ ] 超时场景
- [ ] 并发场景

问题3:用例太多,执行不完

症状:用例数量庞大,测试时间不够

解决方案

  1. 优先级排序

    • 先执行 P0 和 P1 用例
    • P2 和 P3 根据时间选择性执行
  2. 风险评估

    • 高风险区域增加用例
    • 低风险区域减少用例
  3. 自动化

    • 将重复性用例自动化
    • 手工测试专注于探索性测试
  4. 用例合并

    • 合并相似用例
    • 一个用例验证多个检查点

示例

## 用例优化前(5个用例)

TC-001: 登录成功
TC-002: 登录后显示用户名
TC-003: 登录后显示头像
TC-004: 登录后显示菜单
TC-005: 登录后跳转首页

## 用例优化后(1个用例)

TC-001: 登录成功并验证用户信息

**测试步骤**:
1. 输入正确的用户名和密码
2. 点击登录按钮

**预期结果**:
- ✓ 登录成功
- ✓ 显示用户名
- ✓ 显示用户头像
- ✓ 显示导航菜单
- ✓ 跳转到首页

问题4:用例描述不清晰

症状:其他人执行用例时理解困难

解决方案

使用 Given-When-Then 格式:

## TC-001: 购物车添加商品

**Given(前置条件)**:
- 用户已登录
- 商品库存充足(> 10 件)
- 购物车为空

**When(操作步骤)**:
1. 访问商品详情页
2. 选择数量:2
3. 点击"加入购物车"按钮

**Then(预期结果)**:
- 显示"添加成功"提示
- 购物车图标显示数字 2
- 商品出现在购物车列表中
- 商品数量显示为 2
- 总价 = 单价 × 2

问题5:测试数据准备困难

症状:每次执行用例都要花很多时间准备数据

解决方案

  1. 创建测试数据集
## 测试数据集

### 用户数据
| 用户名 | 密码 | 角色 | 状态 | 用途 |
|--------|------|------|------|------|
| admin@test.com | Admin123! | 管理员 | 正常 | 管理员功能测试 |
| user1@test.com | User123! | 普通用户 | 正常 | 正常流程测试 |
| user2@test.com | User123! | 普通用户 | 锁定 | 异常状态测试 |

### 商品数据
| 商品ID | 名称 | 价格 | 库存 | 用途 |
|--------|------|------|------|------|
| P001 | 商品A | 100 | 999 | 正常购买测试 |
| P002 | 商品B | 200 | 1 | 库存不足测试 |
| P003 | 商品C | 0 | 100 | 免费商品测试 |
  1. 使用数据生成工具

    • Faker.js(JavaScript)
    • Faker(Python)
    • 自定义数据生成脚本
  2. 数据库快照

    • 保存测试数据库快照
    • 每次测试前恢复快照

问题6:用例维护成本高

症状:需求变更后要更新大量用例

解决方案

  1. 模块化设计
## 公共步骤库

### 登录步骤
**步骤ID**: COMMON-LOGIN
**步骤**:
1. 访问登录页面
2. 输入用户名:{username}
3. 输入密码:{password}
4. 点击登录按钮

### 添加商品到购物车
**步骤ID**: COMMON-ADD-TO-CART
**步骤**:
1. 访问商品详情页:{product_id}
2. 选择数量:{quantity}
3. 点击"加入购物车"

## 测试用例

### TC-001: 购买商品流程
**步骤**:
1. 执行 COMMON-LOGIN (username=user1, password=User123!)
2. 执行 COMMON-ADD-TO-CART (product_id=P001, quantity=2)
3. 点击购物车图标
4. 点击"去结算"按钮
...
  1. 参数化用例
## TC-001: 登录验证(参数化)

| 用例ID | 用户名 | 密码 | 预期结果 |
|--------|--------|------|---------|
| TC-001-1 | valid@test.com | Valid123! | 登录成功 |
| TC-001-2 | invalid@test.com | Valid123! | 用户名错误 |
| TC-001-3 | valid@test.com | Invalid | 密码错误 |
| TC-001-4 | | Valid123! | 用户名为空 |
| TC-001-5 | valid@test.com | | 密码为空 |

问题7:不知道如何验证复杂的预期结果

症状:预期结果涉及多个系统或复杂计算

解决方案

分解验证点:

## TC-001: 订单提交

**预期结果**:

### 1. 前端显示
- [ ] 显示"订单提交成功"提示
- [ ] 跳转到订单详情页
- [ ] 订单号格式正确(ORD-YYYYMMDD-XXXXX)
- [ ] 订单状态显示"待支付"

### 2. 数据库验证
- [ ] orders 表新增一条记录
- [ ] order_items 表新增对应商品记录
- [ ] 商品库存减少对应数量
- [ ] 用户积分增加

### 3. 第三方系统
- [ ] 发送订单确认邮件
- [ ] 推送订单通知到手机
- [ ] 同步订单到 ERP 系统

### 4. 日志验证
- [ ] 记录订单创建日志
- [ ] 记录库存变更日志
- [ ] 记录积分变更日志

获取更多帮助

如果问题仍未解决:

  1. 查看 FAQ.md
  2. 查看示例的 README.md 文件
  3. 参考测试用例模板
  4. 咨询团队的测试负责人

相关技能: requirements-analysis、functional-testing、test-case-reviewer、test-strategy。

目标受众

  • 在真实项目中执行该测试域工作的 QA 与开发人员
  • 需要结构化、可复用测试交付物的测试负责人
  • 需要快速生成可落地测试产出的 AI 使用者

不适用场景

  • 无测试范围上下文的纯线上应急处置
  • 需要法律/合规最终裁定但缺少专家复核的决策
  • 缺少最小输入(范围、环境、期望行为)的请求

关键成功因素

  • 先明确范围、环境与验收标准,再生成测试内容
  • 生成结果必须结合真实系统约束做二次校验
  • 保持产物可追踪(需求 -> 测试点 -> 缺陷 -> 决策)

输出模板与解析脚本

  • 模板目录:output-templates/
    • template-word.md(Word 友好结构)
    • template-excel.tsv(Excel 可直接粘贴)
    • template-xmind.md(XMind 结构化大纲)
    • template-json.json
    • template-csv.csv
    • template-markdown.md
  • 解析脚本目录:scripts/
    • 解析通用:parse_output_formats.py
    • 解析按格式:parse_word.pyparse_excel.pyparse_xmind.pyparse_json.pyparse_csv.pyparse_markdown.py
    • 转换通用:convert_output_formats.py
    • 转换按格式:convert_to_word.pyconvert_to_excel.pyconvert_to_xmind.pyconvert_to_json.pyconvert_to_csv.pyconvert_to_markdown.py
    • 批量转换:batch_convert_templates.py(批量输出到 artifacts/

示例:

python3 scripts/parse_json.py output-templates/template-json.json
python3 scripts/parse_markdown.py output-templates/template-markdown.md
python3 scripts/convert_to_json.py output-templates/template-markdown.md
python3 scripts/convert_output_formats.py output-templates/template-json.json --to csv
python3 scripts/batch_convert_templates.py --skip-same
Weekly Installs
16
GitHub Stars
3
First Seen
13 days ago
Installed on
cursor15
gemini-cli14
github-copilot14
codex14
amp14
cline14