一、经典黑盒测试方法(必会款)
1️⃣ 等价类划分(最基础,但很多人用错)
核心思想 :
把输入分组,每组里随便挑一个都"等价"。
例子:
-
年龄输入:
0--120-
有效等价类:
1--120 -
无效等价类:
≤0、>120、非数字
-
真相 :
👉 你不是在省测试量,是在防止无脑穷举。
2️⃣ 边界值分析(BUG 高发区)
口诀:
错误,80% 在边界附近
测试点通常是:
-
min-1, min, min+1 -
max-1, max, max+1
反例吐槽 :
只测 max 不测 max+1 = 没测。
3️⃣ 决策表测试(规则一多就靠它)
适合场景:
-
业务规则复杂
-
多条件组合(权限、状态机、订单流)
例子:
用户是否能下单?
-
是否登录
-
是否实名认证
-
是否余额充足
👉 全部组合列成表,一刀切漏测。
4️⃣ 状态迁移测试(状态型系统必备)
适合:
-
登录 / 登出
-
设备在线 / 离线 / 升级中
-
IoT、网关、协议栈
关注点:
-
合法迁移
-
非法迁移
-
重复迁移
-
异常打断后状态是否错乱
⚠️ 很多线上事故,本质是状态回不去。
5️⃣ 因果图法(决策表 Pro Max)
-
输入条件 = 原因
-
输出结果 = 结果
👉 把逻辑关系画出来,再转成测试用例
👉 防"条件遗漏症"
6️⃣ 错误推测法(老测试最值钱的能力)
一句话:
靠经验"猜"哪里会炸
常见高危点:
-
空值 / NULL
-
网络抖动
-
重复提交
-
超时重试
-
并发 + 顺序错乱
⚠️ 这不是瞎猜,是踩坑史换来的直觉。
7️⃣ 场景法 / 用例流测试(老板最爱)
不关心单点功能,只关心:
-
用户从 A 到 Z 能不能走完
-
中途失败后能不能恢复
例子:
登录 → 配网 → 绑定设备 → 升级 → 控制 → 断网 → 重连
8️⃣ 随机测试 / Monkey Test
-
随机输入
-
随机操作
-
随机顺序
适合:
-
UI
-
移动端
-
嵌入式交互系统
真相 :
👉 稳定性不靠设计,靠折磨。
9️⃣ 兼容性测试
-
系统版本
-
浏览器
-
设备型号
-
分辨率
现实世界真理:
你没测到的环境,就是用户用的环境。
🔟 性能 & 压力测试(虽是黑盒,但经常被忽略)
-
响应时间
-
并发
-
内存泄漏(长期跑)
对 IoT / 网关来说:
- 设备数上来以后,才是真正的测试开始
二、网关测试用例设计
你这个不是"单一方法",而是多种黑盒方法叠加:
| 测试点 | 对应黑盒方法 |
|---|---|
| Web 配置页 | 等价类 / 边界值 / 异常输入 |
| MQTT 连接流程 | 状态迁移测试 |
| 服务器 IP 配置 | 决策表 / 场景法 |
| 网关唯一性校验 | 规则校验 + 错误推测 |
| 多网关接入 | 并发 / 冲突测试 |
测试对象
-
网关(有 Web 配置页)
-
本地 / 私有云 MQTT 服务器
-
网关唯一标识:
Gateway No / MAC / IP
1.Web 配置页面(服务器 IP / 端口)
| 用例ID | 测试点 | 输入 | 操作 | 预期结果 |
|---|---|---|---|---|
| CFG-01 | 正常 IP | 192.168.1.10 | 保存 | 保存成功 |
| CFG-02 | 非法 IP | 999.1.1.1 | 保存 | 提示格式错误 |
| CFG-03 | 字符串 IP | abc.def | 保存 | 拒绝 |
| CFG-04 | 空 IP | 空 | 保存 | 不允许 |
| CFG-05 | 前后空格 | " 192.168.1.10 " | 保存 | 自动 trim |
| CFG-06 | 端口 1883 | 1883 | 保存 | 成功 |
| CFG-07 | 端口 0 | 0 | 保存 | 拒绝 |
| CFG-08 | 端口 65536 | 65536 | 保存 | 拒绝 |
| CFG-09 | 修改后立即生效 | 新 IP | 保存 | 断旧连新 |
| CFG-10 | 重启后保留 | 正常参数 | 重启 | 参数不丢 |
⚠️ 如果 CFG-09 / CFG-10 没测,等着返工
2.MQTT 连接状态迁移
| 用例ID | 测试点 | 场景 | 操作 | 预期结果 |
|---|---|---|---|---|
| MQTT-01 | 初始状态 | 未配置 | 上电 | 显示未连接 |
| MQTT-02 | 正常连接 | 正确 IP | 上电 | 连接成功 |
| MQTT-03 | IP 错误 | 错 IP | 上电 | 连接失败 |
| MQTT-04 | 服务器断网 | 已连接 | 断网 | 状态变离线 |
| MQTT-05 | 自动重连 | 断网后恢复 | 等待 | 自动恢复 |
| MQTT-06 | 重连风暴 | IP 错 | 观察 | 不疯狂刷日志 |
| MQTT-07 | 配置变更 | 在线 | 改 IP | 旧连接断开 |
| MQTT-08 | 服务器重启 | 在线 | 重启服务器 | 网关重连 |
👉 状态显示 ≠ 实际连接,必须抓服务器日志验证
3.网关信息上报(注册 / 心跳)
| 用例ID | 测试点 | 操作 | 预期 |
|---|---|---|---|
| REG-01 | 首次上线 | 上电 | 上报 No/MAC/IP |
| REG-02 | 断线重连 | 拔网线 | 重连后重新上报 |
| REG-03 | 服务器重启 | 重启 | 网关重新注册 |
| REG-04 | 字段完整性 | 抓包 | 字段齐全 |
| REG-05 | 固件版本 | 上报 | 正确显示 |
| REG-06 | IP 变化 | DHCP 改 IP | 新 IP 上报 |
4.唯一性校验(重点🔥)
1️⃣ Gateway No 冲突
| 用例ID | 场景 | 网关 A | 网关 B | 预期 |
|---|---|---|---|---|
| UNI-NO-01 | No 相同 | No=001 | No=001 | B 被拒 |
| UNI-NO-02 | A 在线 | 在线 | 上线 | B 注册失败 |
| UNI-NO-03 | A 离线 | 掉线 | 上线 | 是否允许(需求) |
| UNI-NO-04 | 顶替场景 | 离线 | 同 No | 行为明确 |
⚠️ 这个"是否允许顶替"必须产品拍板,不是技术自作主张
2️⃣ MAC 冲突(最高风险)
| 用例ID | 场景 | 操作 | 预期 |
|---|---|---|---|
| UNI-MAC-01 | MAC 重复 | 两网关 MAC 相同 | 后者拒绝 |
| UNI-MAC-02 | 伪造 MAC | 手动改 | 服务器拒 |
| UNI-MAC-03 | 已注册 MAC | 再上线 | 不覆盖 |
| UNI-MAC-04 | MAC 冲突提示 | 冲突 | 明确错误码 |
👉 MAC 冲突 ≠ 静默失败,否则排障地狱
3️⃣ IP 冲突(灰色地带)
| 用例ID | 场景 | 操作 | 预期 |
|---|---|---|---|
| UNI-IP-01 | DHCP 冲突 | 两网关同 IP | 是否告警 |
| UNI-IP-02 | IP 变化 | 改 IP | 服务器更新 |
| UNI-IP-03 | NAT 场景 | 同出口 IP | 不误判 |
5.并发 & 极端场景(真实世界)
| 用例ID | 场景 | 操作 | 预期 |
|---|---|---|---|
| CON-01 | 同时上线 | 两网关同时 | 无异常 |
| CON-02 | 同 No 并发 | 同时连 | 只允许一个 |
| CON-03 | 快速重连 | 反复断连 | 不死锁 |
| CON-04 | 配置中断 | 保存时断电 | 不脏数据 |