游戏功能测试不是"点点点",而是用系统化的方法把玩法"测透"。本文教你用场景法、状态迁移法、判定表在MOBA/RPG/卡牌三大品类中落地用例设计。
目录
- 游戏功能测试测什么
- 游戏用例设计八大方法
- 场景法:游戏测试的主力方法
- 状态迁移法:技能与Buff测试利器
- 判定表法:复杂条件组合克星
- 三大品类实战案例
- 游戏功能测试 checklist
- 总结
一、游戏功能测试测什么
1.1 功能测试的范围
游戏功能测试覆盖游戏内所有"可交互"的模块:
核心玩法系统:
├── 战斗系统(攻击、技能、伤害、死亡、复活)
├── 任务系统(主线、支线、日常、成就)
├── 背包系统(物品、装备、使用、丢弃、整理)
├── 角色系统(升级、加点、转职、外观)
├── 社交系统(好友、公会、聊天、组队、交易)
├── 商城系统(购买、充值、退款、限购)
└── 活动系统(签到、抽奖、限时活动)
外围功能系统:
├── 登录注册(账号、实名、防沉迷)
├── 设置系统(音效、画质、操作、语言)
├── 网络系统(断线重连、切后台、弱网)
└── 数据系统(存档、云同步、多端互通)
1.2 功能测试的四个层次
| 层次 | 测什么 | 举例 |
|---|---|---|
| 单功能 | 单个功能是否可用 | 能否成功释放技能 |
| 流程 | 完整流程是否走通 | 从登录到进入战斗到结算 |
| 异常 | 异常场景是否处理 | 战斗中掉线能否恢复 |
| 边界 | 极端情况是否健壮 | 背包满了还能不能拾取 |
二、游戏用例设计八大方法
2.1 方法总览
| 方法 | 适用场景 | 游戏中的应用 |
|---|---|---|
| 等价类划分 | 输入有规律 | 充值金额、角色等级 |
| 边界值分析 | 有取值范围 | 血量下限、背包上限 |
| 场景法 | 业务流程 | 核心玩法流程(主力) |
| 状态迁移法 | 状态流转 | 技能状态、Buff状态 |
| 判定表法 | 多条件组合 | 伤害计算、掉落判断 |
| 因果图法 | 输入输出关联 | 复杂业务规则 |
| 正交实验法 | 多因素多水平 | 装备搭配、阵型组合 |
| 错误推测法 | 经验补充 | 历史高发Bug点 |
2.2 游戏测试的方法优先级
游戏功能测试的方法使用频率:
场景法 ████████████████████ ★★★★★(60%用例靠它)
状态迁移法 ██████████████ ★★★★☆(技能/Buff必备)
边界值分析 ██████████████ ★★★★☆(数值相关必用)
等价类划分 ██████████ ★★★☆☆
判定表法 ████████ ★★★☆☆
错误推测法 ██████████ ★★★☆☆(老司机靠它)
正交实验法 ████ ★★☆☆☆(组合爆炸时用)
三、场景法:游戏测试的主力方法
3.1 什么是场景法
场景法:把业务按"基本流(正常路径)+ 备选流(异常/分支路径)"梳理出来,每条路径就是一条测试场景。
3.2 场景法的两个流
基本流(Basic Flow):最顺畅的正常路径
备选流(Alternative Flow):各种异常和分支
测试用例 = 基本流 + 各种备选流的组合
3.3 实战:以"充值购买皮肤"为例
第一步:梳理业务流程
基本流:
打开商城 → 选择皮肤 → 点击购买 → 跳转支付 →
完成支付 → 返回游戏 → 皮肤到账 → 装备皮肤
备选流:
A. 余额不足 → 提示"余额不足" → 引导充值
B. 支付中途取消 → 返回商城 → 未扣款
C. 支付成功但未返回游戏 → 手动返回 → 皮肤是否到账
D. 网络中断 → 支付结果未知 → 重连后核对
E. 重复点击购买 → 是否会重复扣款
F. 皮肤已拥有 → 重复购买的处理
G. 支付成功但服务器延迟 → 皮肤延迟到账
H. 活动价与折扣券叠加 → 价格计算
第二步:生成测试用例
| 用例编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 |
|---|---|---|---|---|
| TC-001 | 正常购买(基本流) | 余额充足 | 商城→选皮肤→购买→支付 | 扣款成功,皮肤到账 |
| TC-002 | 余额不足 | 余额<皮肤价 | 购买 | 提示余额不足,不扣款 |
| TC-003 | 支付取消 | - | 购买→支付页取消 | 订单关闭,不扣款 |
| TC-004 | 支付成功未返回 | - | 支付成功→杀进程→重进 | 皮肤正确到账 |
| TC-005 | 支付中断网 | 弱网 | 支付时断网 | 提示网络异常,重连后状态一致 |
| TC-006 | 重复点击购买 | 网络慢 | 快速连点购买10次 | 只生成1个订单 |
| TC-007 | 重复购买已拥有 | 已有该皮肤 | 再次购买 | 提示已拥有/转为其他货币 |
| TC-008 | 折扣叠加 | 有折扣券 | 活动价+用券购买 | 价格计算正确 |
3.4 场景法的小技巧
1. 每个功能至少找出 5-10 个备选流
2. 重点挖掘"中断类"场景(断网、切后台、杀进程、来电)
3. 关注"重复类"场景(重复点击、重复提交、重复领取)
4. 关注"时序类"场景(先A后B vs 先B后A)
5. 关注"并发类"场景(多端登录、多人同时操作)
四、状态迁移法:技能与Buff测试利器
4.1 为什么游戏需要状态迁移法
游戏角色有大量"状态",状态之间可以互相转换。用状态迁移法能系统覆盖所有状态转换。
4.2 状态迁移图示例
以角色的"战斗状态"为例:
4.3 状态迁移用例设计
状态-事件表:
| 当前状态 | 触发事件 | 预期新状态 | 测试用例 |
|---|---|---|---|
| 站立 | 移动 | 移动 | 按方向键,角色开始移动 |
| 站立 | 攻击 | 攻击 | 点击攻击键,进入攻击动作 |
| 站立 | 受击 | 受击 | 被敌人攻击,进入受击 |
| 移动 | 松开方向 | 站立 | 停止移动,回到站立 |
| 移动 | 攻击 | 攻击 | 移动中攻击,是否正确打断 |
| 攻击 | 受击 | 受击 | 攻击被打断,是否正确 |
| 攻击 | 攻击结束 | 站立 | 攻击动作播完回到站立 |
| 受击 | 眩晕 | 眩晕 | 受击叠加眩晕效果 |
| 眩晕 | 眩晕结束 | 站立 | 眩晕时间到自动恢复 |
| 死亡 | 复活 | 站立 | 点击复活,恢复站立 |
| 死亡 | 受击 | 死亡 | 死亡后再次受击,不应有反应(边界) |
4.4 Buff状态测试要点
Buff的叠加规则(最容易出Bug):
├── 同类Buff能否叠加?(刷新时间 vs 叠加层数)
├── Buff层数上限是多少?超过会怎样?
├── Buff过期时机是否准确?
├── 死亡时Buff是否清除?
├── 切换场景时Buff是否保留?
├── 多个Buff叠加的数值是否正确?
└── Buff与技能释放的互相影响?
举例:一个"攻击力+10%,持续10秒,可叠加5层"的Buff
→ 需要测试:叠加1/2/3/4/5层
→ 第6层是否被拒绝
→ Buff时间是否独立计算
→ 死亡后是否清空
→ 重新叠加是否刷新时间
五、判定表法:复杂条件组合克星
5.1 什么时候用判定表
当功能结果由多个条件组合决定时,用判定表能系统覆盖所有组合。
5.2 实战:伤害计算判定表
伤害规则:
- 基础伤害 = 攻击力 - 防御力
- 若暴击,伤害 × 2
- 若目标有"护盾",先扣护盾
- 若目标血量<30%,触发"斩杀"额外+50%
- 伤害最低不低于1
条件:
C1: 是否暴击
C2: 目标是否有护盾
C3: 目标血量是否<30%
判定表:
| 规则 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 |
|---|---|---|---|---|---|---|---|---|
| C1 暴击 | Y | Y | Y | Y | N | N | N | N |
| C2 护盾 | Y | Y | N | N | Y | Y | N | N |
| C3 低血 | Y | N | Y | N | Y | N | Y | N |
| 动作1 伤害×2 | ✓ | ✓ | ✓ | ✓ | - | - | - | - |
| 动作2 扣护盾 | ✓ | ✓ | - | - | ✓ | ✓ | - | - |
| 动作3 斩杀+50% | ✓ | - | ✓ | - | ✓ | - | ✓ | - |
| 动作4 保底1点 | - | - | - | ✓ | - | - | - | ✓ |
由判定表生成8条测试用例,每条覆盖一种条件组合,保证组合不遗漏。
5.3 判定表的游戏应用场景
适合用判定表的游戏功能:
├── 伤害计算(攻击/防御/暴击/减免)
├── 掉落判断(幸运值/概率/保底/重复检测)
├── 成就触发(多个条件同时满足)
├── 战力计算(装备/等级/技能加成)
├── 任务完成判定(多条件组合)
└── 匹配规则(段位/延迟/组队)
六、三大品类实战案例
6.1 MOBA品类(如王者荣耀)
测试重点:
├── 英雄技能:每个技能的释放、命中、连招、打断
├── 装备系统:属性叠加、被动触发、出装顺序
├── 对战逻辑:补刀、推塔、击杀、团战
├── 匹配系统:段位匹配、组队匹配、人机识别
├── 结算系统:评分、战报、加星掉星
└── 异常场景:掉线重连、挂机判定、托管
典型用例:
TC-MOBA-001:两个英雄的技能同时命中,伤害是否能正确累加?
TC-MOBA-002:出装顺序不同是否影响属性最终结果?
TC-MOBA-003:掉线5分钟内重连,能否回到原战局?
TC-MOBA-004:一个英雄的减CD装备叠加,CD是否有下限?
6.2 RPG品类(如原神)
测试重点:
├── 任务系统:主线/支线/世界任务的触发和完成
├── 战斗系统:元素反应、属性克制、连携
├── 角色养成:等级、天赋、命座、圣遗物
├── 地图探索:传送点、宝箱、解谜、采集
├── 抽卡系统:概率、保底、结果展示
└── 存档系统:多端同步、自动存档
典型用例:
TC-RPG-001:元素反应组合(火+水=蒸发)伤害是否正确?
TC-RPG-002:圣遗物词条数值是否符合理论计算?
TC-RPG-003:抽卡90次是否必定出金(保底机制)?
TC-RPG-004:完成主线后,对应的世界任务是否正确解锁?
6.3 卡牌品类(如炉石传说)
测试重点:
├── 卡片效果:打出、触发、连锁、结算顺序
├── 卡组构建:数量限制、费用曲线、职业限制
├── 对战规则:抽卡、手牌上限、疲劳、胜负判定
├── 特殊机制:随机效果、发现、变形、窃取
└── 离线场景:断线、切后台、投降
典型用例:
TC-CARD-001:两张卡的触发效果同时满足,结算顺序是什么?
TC-CARD-002:手牌满时抽卡,牌是否会烧掉?
TC-CARD-003:一方倒计时结束前投降,胜负如何判定?
TC-CARD-004:随机效果在相同种子下结果是否可复现?
七、游戏功能测试 checklist
7.1 通用检查清单
7.2 用例编写规范
好的游戏测试用例应包含:
├── 用例编号(TC-模块-序号)
├── 用例标题(一句话说明测什么)
├── 优先级(P0/P1/P2)
├── 前置条件(登录状态/账号数据/环境)
├── 操作步骤(清晰可复现,编号列出)
├── 预期结果(可验证,具体明确)
└── 备注(关联需求/Bug/注意事项)
反面例子:
"测试背包功能" → 太笼统
正面例子:
"TC-BAG-001:背包满时拾取物品
前置:背包格子已满(100/100)
步骤:1.进入地图 2.走到物品上按拾取
预期:提示"背包已满",物品不消失,可继续拾取"
八、总结
8.1 核心要点
| 要点 | 一句话 |
|---|---|
| 功能测试范围 | 覆盖核心玩法系统 + 外围功能系统 |
| 主力方法 | 场景法(60%用例)、状态迁移法、判定表法 |
| 场景法核心 | 基本流 + 备选流,重点挖中断/重复/时序/并发 |
| 状态迁移法 | 技能/Buff/角色状态转换的系统覆盖 |
| 判定表法 | 多条件组合(伤害/掉落/成就)的不遗漏覆盖 |
| 用例规范 | 编号+标题+前置+步骤+预期,可复现可验证 |
8.2 下一篇预告
📌 下一篇:《游戏测试专题第三篇:游戏数值测试实战》------战斗伤害公式验证、经济系统平衡、概率掉落验证,带你搞懂游戏测试里最"值钱"也最烧脑的数值测试。
🔥 数值测试是游戏测试和软件测试分水岭最大的地方,也是薪资差距的关键。下篇见。