首页/开发/软件测试速查/负向测试(Negative Testing)
用例设计方法62 条

负向测试(Negative Testing)

用非法、异常、越界输入验证系统的拒绝与容错行为;与正向测试成对设计,是鲁棒性的主要证据来源。

软件测试速查开发更新于 2026-10-13

负向测试是什么

负向测试用非法、异常、越界输入验证系统的拒绝与容错行为:请求应被拒绝、错误信息明确、系统状态不变。与正向用例成对设计,是鲁棒性的主要证据来源;只测正常路径的系统,遇到误操作或恶意输入时行为不可预期。

基本信息

成对设计每条正向用例配至少一条负向用例
输入类型越界、类型错误、空值、超长、特殊字符
三重断言请求被拒绝、错误明确、状态未改变
错误暴露面错误信息不得含堆栈与内部版本
适用范围接口、表单、文件上传与命令行参数

成对设计示例:转账金额

成对设计示例:转账金额
# 正向:金额 = 100(余额充足)-> 成功
# 负向:金额 = -1        -> 参数错误
# 负向:金额 > 余额     -> 余额不足
# 负向:金额为非数字    -> 参数错误
# 负向:金额为空        -> 参数错误

典型使用场景

  • 参数校验:金额为负数、非数字、超精度时的拒绝行为。
  • 鉴权:无令牌、过期令牌、伪造令牌访问受保护接口。
  • 并发冲突:库存不足时下单、余额不足时转账的确定反馈。
  • 文件上传:超大文件、伪装扩展名、损坏内容的处理。
  • 幂等与重复:重复提交不应产生第二笔业务。
  • 前端表单:直接调用接口绕过前端校验,验证服务端兜底。

要断言的三个点

断言点检查什么常见遗漏
拒绝结果状态码与业务错误码只断言 500,不区分参数错误
错误信息可读、无内部细节堆栈与库版本泄漏
状态不变账务、库存、审计日志无变化只查响应未查数据
负向用例同样要写清预期:错误码、错误文案与状态三者对应,出现乱码或堆栈不算「拒绝成功」。
错误信息泄露内部实现(堆栈、库版本、SQL 片段)属于信息暴露,应在测试阶段拦下而不是上线后靠 WAF。

易错点

  • 只断言返回了错误码,不校验状态与数据未被修改
  • 错误信息暴露内部细节(堆栈、库版本),需单独检查
  • 负向输入只用一种类型,覆盖不到类型错误与空值
  • 把服务端 500 当作拒绝成功,掩盖了输入校验缺失
  • 负向用例不留日志与证据,线上复现时无从比对

数据来源与参考

  • ISTQB CTFL 4.0 大纲(负向测试相关描述)
  • OWASP WSTG(错误处理测试)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌