3. 测试用例设计原则:等价类、边界值、因果图等,如何用于冒烟测试

讲真,很多人觉得冒烟测试就是随便跑跑主流程。 我就见过不少团队,上来就把几百个用例全塞进冒烟集里。 结果呢?跑一次要好几个小时,开发看到失败报告都懒得翻。 这哪是冒烟,这分明是烤全羊。

冒烟测试的核心是快和准。 快,是指几分钟内必须跑完。 准,是能一把抓住最致命的缺陷。 怎么做到?你想想看,等价类、边界值这些经典方法,其实就是为了解决「怎么用最少用例覆盖最多风险」的问题。

核心观点: 冒烟测试不是把全量用例缩小,而是用设计原则重新裁剪出「必须通过」的基线。
冒烟测试用例设计原则体系 冒烟测试用例设计 等价类划分 输入域分组 每类选一个代表 减少冗余覆盖 边界值分析 0、1、边界点 上点/离点/内点 发现边界缺陷 因果图法 条件-结果依赖 逻辑组合覆盖 关键路径提取 取舍策略 只取每类最核心代表 优先边界+1个正常 组合简化 因果图提主路径 结论表只测有效组合 最终输出 8-15个冒烟用例 可5分钟内执行完毕 ⚠ 注意 冒烟测试不是减量,而是提纯——用设计原则找出真正的「不能失败」的场景

3.1 等价类划分:在冒烟中如何「少测」还「不漏」

等价类划分说白了就是分堆儿。 你把所有可能的输入分成几堆,每堆挑一个来测。 如果这个代表通过了,整堆都认为没问题。

但在冒烟测试里,你不能按常规来。 我以前做大促页面的冒烟测试时,登录模块分了有效账号、无效账号、空账号三堆。 正常全量测试要测6-8个用例。 但在冒烟集里,我只保留了「有效账号登录成功」和「无效账号登录被拒」这两个。

冒烟版本的等价类选择原则:

  • 有效等价类:只选最典型、最正常的那个代表
  • 无效等价类:只选一个最常见的错误场景(比如密码错误)
  • 边界等价类:如果有边界特征,单独拎出来
我个人习惯: 主流程+1个最可能出错的异常路径。比如支付流程,主流程是余额充足支付成功,异常路径是余额不足被拦截。这两个覆盖了最核心的交互路径。

3.2 边界值分析:冒烟测试的「照妖镜」

为什么边界值在冒烟里特别有用? 因为我见过太多系统,主流程跑得溜,一到边界就崩。 你想想看,登录表单的密码长度限制是6-20位。 正常用户谁会输5位或21位? 但攻击者会、程序异常会、数据迁移时也会。

边界值分析在冒烟中的应用,我总结了一个「最小边界集」:

场景 正常值 冒烟边界值 原因
账号长度 (6-20) 10位 6位、7位、20位、21位 上点+离点各一个
金额范围 (0.01-9999.99) 100.00 0.01、0.02、9999.99、10000.00 小数边界、整数边界
翻页 (每页20条) 第1页 第0页、第1页、最后1页、最后1页+1 分页常见索引越界

边界值在冒烟中的实际用法:

  1. 先找出所有输入域的边界
  2. 对每个边界,提取上点(边界本身)、离点(紧挨着边界+1或-1)
  3. 在冒烟集中,每个边界只保留一个正向+一个负向
我曾经踩过的坑: 有一次做支付模块的冒烟测试,我只测了100元、500元这种正常金额。结果上线后用户充0.01元成功了,但充0.02元报错——因为精度判断写了「>0.01」而不是「>=0.01」。从此,我的冒烟集里永远保留一个最小金额+一个略低于最小金额的边界用例。

3.3 因果图法:给冒烟测试装上「逻辑大脑」

因果图法比较复杂,但在冒烟里我用的是简化版。 说白了,就是找出「什么条件组合会导致什么结果」。 然后只保留那些「一旦出错影响面最大」的组合。

举个例子:一个订单取消功能。 条件有:订单状态(待支付/已支付/已发货)、用户身份(普通/VIP)、取消时间(30分钟内/30分钟后)。 结果有:取消成功、退款成功、取消被拒。

全量因果图可能有12种组合。 但在冒烟测试里,我只会测这3条:

【冒烟因果路径】
条件: 待支付 + 普通用户 + 30分钟内 → 结果: 取消成功(无退款)
条件: 已支付 + VIP用户 + 30分钟内 → 结果: 取消成功 + 全额退款
条件: 已发货 + 任何用户 + 任何时间 → 结果: 取消被拒

为什么这么选?

  • 路径1是最基本的取消能力,任何版本不能丢
  • 路径2涉及资金处理,出问题就是P0事故
  • 路径3验证了约束边界,防止用户误操作导致发货后还能取消
做因果图的关键: 不是把所有条件都画出来,而是先画出核心业务逻辑的「主干依赖图」。然后用「如果这个条件不成立,整个系统是否瘫痪」来判断是否放进冒烟集。

3.4 三种方法的组合实践

在实际工作中,这三种方法是搭配使用的。 我给你画个我常用的冒烟用例生成流程:

【我个人的冒烟用例生成标准流程】

1. 用 因果图 画出核心功能的条件-结果依赖
   → 找出所有「必须成立」的关键路径

2. 对每个关键路径的输入域,用 等价类 拆分
   → 只保留一个正向代表 + 一个最常见异常代表

3. 对每个输入域的数值/长度/范围,用 边界值 补充
   → 有边界的,额外加1个上点+1个离点

4. 最终汇聚为冒烟测试集(8-15个用例)

5. 评审:如果某个用例去掉后系统仍然能通过冒烟
   → 删除它。冒烟用例不在多,而在精。

你可能会问:因果图不是还要画判定表吗? 没错,但在冒烟测试里,判定表可以简化。 我通常只保留结论为「生效」和「不生效」的两个极端行。 中间那些过渡状态,比如部分退款、部分取消,放在详细测试里测。

最终产出物: 一个8-15个用例的冒烟测试集,5分钟内可执行完毕,覆盖所有核心功能的「正向通过」+「最常见失败」。写到这里我想说,这三个原则用好了,你的冒烟测试不再是玄学,而是实打实的工程质量门禁。