专业的全自动阶梯压力测试流程(使用普通线程组)

基于之前的分析,以下是一个符合专业标准的阶梯测试方案,修正了启动延迟计算、阶梯顺序、Ramp-Up 比例等问题。


一、阶梯测试设计原则(专业标准)

原则说明
阶梯顺序冒烟 → 负载 → 峰值 → 压力 → 浸泡(峰值在压力前,避免过载影响峰值结果)
启动延迟公式延迟 = 前面所有阶梯的(持续时间 + Ramp-Up)之和 + 缓冲时间(5~10秒)
Ramp-Up 占比占持续时间的 10%~30%(浸泡测试可适当降低)
缓冲时间每阶梯结束后增加 5~10 秒,确保线程完全停止
持续时间包含 Ramp-Up + 稳定运行时间(Hold)

二、5 个阶梯的详细参数

阶梯名称测试类型线程数Ramp-Up(s)持续时间(s)稳定运行时间(s)Ramp-Up占比
1Step1_Smoke冒烟测试5130293.3%
2Step2_Load负载测试10060180017403.3%
3Step3_Spike峰值测试10003030027010%
4Step4_Stress压力测试50012090078013.3%
5Step5_Soak浸泡测试5060028800282002.1%

浸泡测试 Ramp-Up 设为 600 秒(10分钟),更真实模拟用户逐渐上线。


三、启动延迟计算(含缓冲)

设缓冲时间 BUFFER = 5 秒。

计算公式:

text

延迟(N) = Σ(前N-1个阶梯的 (持续时间 + Ramp-Up)) + (N-1) * BUFFER

详细计算表:

阶梯前序总时长缓冲累加启动延迟(秒)计算式
10000
2(30+1)=3153631 + 5
331 + (1800+60)=18911019011891 + 10
41891 + (300+30)=22211522362221 + 15
52221 + (900+120)=32412032613241 + 20

阶梯3 的延迟 1901 秒 ≈ 31.7 分钟,阶梯4 延迟 2236 秒 ≈ 37.3 分钟,阶梯5 延迟 3261 秒 ≈ 54.4 分钟。


四、完整测试计划结构

yaml

测试计划: 专业阶梯压力测试

全局配置:
  ├── 用户定义的变量
  │    ├── BASE_URL: api.example.com
  │    ├── PROTOCOL: https
  │    ├── PORT: 443
  │    └── AUTH_TOKEN: Bearer xxxxx
  ├── HTTP请求默认值
  │    ├── 协议: ${PROTOCOL}
  │    ├── 服务器: ${BASE_URL}
  │    └── 端口: ${PORT}
  └── HTTP信息头管理器
       └── Content-Type: application/json

阶梯1: Step1_Smoke (冒烟测试)
  线程组:
    名称: Step1_Smoke
    线程数: 5
    Ramp-Up: 1 秒
    循环次数: 永远
    调度器: ✅
      持续时间: 30 秒
      启动延迟: 0 秒
  HTTP请求: (你的API)

阶梯2: Step2_Load (负载测试)
  线程组:
    名称: Step2_Load
    线程数: 100
    Ramp-Up: 60 秒
    循环次数: 永远
    调度器: ✅
      持续时间: 1800 秒
      启动延迟: 36 秒
  HTTP请求: (你的API)

阶梯3: Step3_Spike (峰值测试)
  线程组:
    名称: Step3_Spike
    线程数: 1000
    Ramp-Up: 30 秒
    循环次数: 永远
    调度器: ✅
      持续时间: 300 秒
      启动延迟: 1901 秒
  HTTP请求: (你的API)

阶梯4: Step4_Stress (压力测试)
  线程组:
    名称: Step4_Stress
    线程数: 500
    Ramp-Up: 120 秒
    循环次数: 永远
    调度器: ✅
      持续时间: 900 秒
      启动延迟: 2236 秒
  HTTP请求: (你的API)

阶梯5: Step5_Soak (浸泡测试)
  线程组:
    名称: Step5_Soak
    线程数: 50
    Ramp-Up: 600 秒
    循环次数: 永远
    调度器: ✅
      持续时间: 28800 秒
      启动延迟: 3261 秒
  HTTP请求: (你的API)

监听器:
  ├── 聚合报告 (每个阶梯单独一个,命名区分)
  ├── 用表格查看结果 (可选)
  └── 查看结果树 (仅调试)

五、专业配置的注意事项

5.1 为什么峰值测试在压力测试之前?

  • 压力测试(500用户)可能已使系统过载,之后再做峰值(1000用户)会受到前序过载的影响(连接池、缓存、CPU升温),测不出真实的突发流量承受能力。

  • 正确顺序:负载(正常)→ 峰值(突发)→ 压力(极限)→ 浸泡(长稳)

5.2 为什么浸泡测试的 Ramp-Up 要 600 秒?

  • 长时间测试需要平滑加载,避免启动瞬间对系统造成额外冲击。

  • 600 秒加载 50 用户,每秒仅增加 0.08 个用户,几乎无感知。

5.3 缓冲时间的作用

  • 防止前一个阶梯的线程因网络延迟或 JMeter 停止慢而残留,导致下一个阶梯启动时并发数不准。

  • 5 秒通常足够;如果系统停止线程较慢,可增加到 10 秒。

5.4 如何验证阶梯不重叠?

  • 在用表格查看结果中,按 Start Time 排序,观察每个阶梯的请求时间范围是否独立。

  • 阶梯1 的时间范围:0 ~ 31 秒
    阶梯2 的时间范围:36 ~ 36+1800+60 = 1896 秒
    没有重叠。


六、执行命令

bash

# 调试(GUI 模式,先调通一个阶梯)
jmeter -t professional_steps.jmx

# 正式执行(非 GUI 模式)
jmeter -n -t professional_steps.jmx -l result.jtl -e -o report/

# 后台运行(适合长时间浸泡)
nohup jmeter -n -t professional_steps.jmx -l result.jtl -e -o report/ > run.log 2>&1 &

七、结果分析重点

运行结束后,分别查看每个阶梯的聚合报告,对比:

阶梯关注点
冒烟脚本正确性,响应时间基准
负载正常负载下的 p95、TPS、错误率
峰值突发流量下响应时间是否陡增,错误率是否 <1%
压力找到拐点(响应时间翻倍、TPS 平头、错误率>1%)
浸泡长时间运行内存是否泄漏,TPS 是否下降

八、总结

这个专业阶梯测试方案具有以下特点:

  • ✅ 顺序合理(峰值在压力前)

  • ✅ 启动延迟公式正确(包含 Ramp-Up 和缓冲)

  • ✅ Ramp-Up 占比符合专业比例

  • ✅ 浸泡测试采用长加载时间

  • ✅ 一次运行,全自动完成 5 个阶梯

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐