限流测试

限流测试:确认算法与维度(IP、用户、接口、令牌桶或固定窗口)、阈值、超限返回 429 与 Retry-After、恢复时间;并发压测可同时观察限流与熔断的联动。

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

限流怎么测

限流测试验证系统在用量异常时的自保行为:阈值内正常放行、超出后按策略拒绝(HTTP 常见 429,带 Retry-After)、窗口滚动后恢复、多维度(按 IP、用户、接口、全局)互不串扰。重点覆盖窗口边界——刚好超一档、跨窗口瞬间的并发。常见算法:固定窗口、滑动窗口、令牌桶、漏桶。

基本信息

常见返回429 Too Many Requests 加 Retry-After 秒数
响应头X-RateLimit 系列自定义头:上限、剩余、重置时间
限流维度全局、IP、用户、接口、租户,多数系统组合使用
算法差异固定窗口简单但对窗口边界突发不友好;令牌桶更平滑
测试手段并发脚本打阈值、等待窗口滑动、检查余量头
分层验证网关层与应用层可能各自限流,两层分别测

阈值探测示例

阈值探测示例
for i in $(seq 1 120); do
  curl -s -o /dev/null -w "%{http_code}\n" \
    -H "Authorization: Bearer $TOKEN" https://api.example.com/v1/query
done | sort | uniq -c    # 统计 200 与 429 的数量分布是否符合阈值

典型使用场景

  • 网关限流上线前的策略验收
  • 防刷验证:短信、登录验证码这类高价值接口
  • 多租户公平性:单个租户刷满不拖垮其他租户
  • 恢复验证:窗口滑动或令牌桶回填后应恢复放行
  • 客户端配合:验证 429 后按 Retry-After 退避重试
  • 容量测试配套:压测时确认限流不误伤正常流量模型

测试点与预期

测试点预期核对
阈值内请求全部正常 200余量头递减正确
刚好超出阈值超额部分 429边界判定精确
窗口滚动后恢复 200重置时间与头一致
不同维度并发互不干扰单用户不限死全局
无 Retry-After禁止客户端无法合理退避
用并发而不是串行探阈值:串行请求的间隔可能让固定窗口永远测不爆,测出来的阈值没有意义。
把临界判定写进用例:第 N 个请求通过、第 N+1 个被拒,多测一个少测一个都会在复盘时扯皮。
测试环境开了限流白名单或限流关闭,测试全绿但上线即炸:先确认测试环境的限流开关与线上一致。

易错点

  • 只测单实例:网关多实例共享计数没验证,实际阈值成倍放大
  • 忽略时间窗边界并发:固定窗口切换瞬间的双倍突发被放过
  • 429 不带 Retry-After:客户端只能盲目重试,形成重试洪峰
  • 限流键选错:全局键把正常用户一起限掉,单用户键又拦不住分布式攻击
  • 测试环境限流被白名单放过:上线才第一次真正触发限流

数据来源与参考

  • RFC 6585(429 Too Many Requests 与 Retry-After)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌