负向测试是什么
负向测试用非法、异常、越界输入验证系统的拒绝与容错行为:请求应被拒绝、错误信息明确、系统状态不变。与正向用例成对设计,是鲁棒性的主要证据来源;只测正常路径的系统,遇到误操作或恶意输入时行为不可预期。
基本信息
| 成对设计 | 每条正向用例配至少一条负向用例 |
|---|---|
| 输入类型 | 越界、类型错误、空值、超长、特殊字符 |
| 三重断言 | 请求被拒绝、错误明确、状态未改变 |
| 错误暴露面 | 错误信息不得含堆栈与内部版本 |
| 适用范围 | 接口、表单、文件上传与命令行参数 |
成对设计示例:转账金额
成对设计示例:转账金额
# 正向:金额 = 100(余额充足)-> 成功
# 负向:金额 = -1 -> 参数错误
# 负向:金额 > 余额 -> 余额不足
# 负向:金额为非数字 -> 参数错误
# 负向:金额为空 -> 参数错误典型使用场景
- 参数校验:金额为负数、非数字、超精度时的拒绝行为。
- 鉴权:无令牌、过期令牌、伪造令牌访问受保护接口。
- 并发冲突:库存不足时下单、余额不足时转账的确定反馈。
- 文件上传:超大文件、伪装扩展名、损坏内容的处理。
- 幂等与重复:重复提交不应产生第二笔业务。
- 前端表单:直接调用接口绕过前端校验,验证服务端兜底。
要断言的三个点
| 断言点 | 检查什么 | 常见遗漏 |
|---|---|---|
| 拒绝结果 | 状态码与业务错误码 | 只断言 500,不区分参数错误 |
| 错误信息 | 可读、无内部细节 | 堆栈与库版本泄漏 |
| 状态不变 | 账务、库存、审计日志无变化 | 只查响应未查数据 |
负向用例同样要写清预期:错误码、错误文案与状态三者对应,出现乱码或堆栈不算「拒绝成功」。
错误信息泄露内部实现(堆栈、库版本、SQL 片段)属于信息暴露,应在测试阶段拦下而不是上线后靠 WAF。