随机测试是什么
随机测试用随机生成或随机选取的输入去刺激系统,模拟真实世界中杂乱、非预期的数据分布,常用来发现边界思维覆盖不到的长尾问题。它和猴子测试(Monkey Testing)相关但更强调可控:固定随机种子保证可复现、设置输入约束避免无意义噪声、把随机发现的问题转成确定性用例固化下来。
基本信息
| 输入构造 | 随机字符串、极值、特殊字符、乱序操作、随机接口序列 |
|---|---|
| 可复现要求 | 固定随机种子并记录,失败案例能原样重放 |
| 约束设计 | 限定输入域与频率,避免大量无效噪声淹没真信号 |
| 执行方式 | 自动化批量生成并执行,配合断言与监控捕获异常 |
| 结果处理 | 异常先精简为最小复现,再决定是否转正式用例 |
| 典型工具 | 属性测试框架(如 Hypothesis、QuickCheck 风格)与模糊测试工具 |
典型使用场景
- 输入解析:文本解析、编码转换、文件校验等对乱数据敏感的功能。
- 接口健壮性:随机参数组合与字段缺失,验证错误处理不崩溃。
- 安全边界:随机尝试越界输入,配合监控捕获异常与注入类问题。
- 游戏与仿真:随机操作序列探索状态空间,找罕见分支。
- 数据管道:随机分布数据验证处理逻辑对脏数据的容忍度。
与系统化测试的分工
| 维度 | 随机测试 | 系统化测试 |
|---|---|---|
| 目标 | 发现未知的长尾问题 | 验证已知规则与边界 |
| 输入来源 | 随机生成或随机序列 | 等价类、边界值、判定表 |
| 可复现性 | 依赖种子记录 | 天然确定 |
| 结果 | 候选缺陷池 | 通过与否的判定 |
| 定位成本 | 需先最小化复现 | 直接对照预期 |
随机不是无序:定义好输入域与概率分布,随机才有效,全宇宙乱打只会产生噪声。
找到问题要固化:把随机发现的场景转成确定性用例进回归集,否则下次要重新碰运气。
线上做随机测试要克制:可能写入脏数据或触发告警,限定测试账号与沙箱环境。