如何用JMeter 5构建符合特定规则的API负载测试计划?
JMeter 5测试计划实现方案
线程组选择:2个线程组
分开用2个线程组更合理:一个单线程处理API A的初始化重试和定时调用,另一个多线程负责API B的负载测试,逻辑清晰且互不干扰。
线程组1:单线程处理API A
核心配置
- 线程数:1
- Ramp-Up时间:0
- 循环次数:永久(直到API B线程组执行完毕)
元件编排顺序(从上到下)
- While Controller(处理API A初始化重试)
- 条件表达式:
${__jexl3(${JMeterThread.last_sample_ok} == false,)} - 内部嵌套元件:
- HTTP请求:配置API A的请求方法、URL、Headers等
- 响应断言:勾选「响应代码」,模式匹配选「Equals」,值填
200 - 固定定时器:设置1000(可选,避免高频重试压垮服务)
- 条件表达式:
- Constant Timer(每10分钟调用一次API A)
- 延迟时间:
600000(10分钟=600秒=600000毫秒)
- 延迟时间:
- HTTP请求:API A(定时调用,配置和初始化的API A一致)
- While Controller(控制线程组持续运行)
- 条件表达式:
${__jexl3(${__threadGroupFinished(线程组2)},)}(替换线程组2为实际API B线程组的名称,判断其是否结束)
- 条件表达式:
线程组2:多线程负载测试API B
核心配置
- 线程数:根据负载需求设置(如10、50等)
- Ramp-Up时间:按需设置(如线程数×100,让线程逐步启动)
- 循环次数:永久(由CSV配置控制停止)
元件编排顺序(从上到下)
- CSV Data Set Config
- 文件名:CSV文件的绝对/相对路径
- 变量名称:对应CSV列的变量名(如
param1,param2) - 分隔符:匹配CSV实际分隔符(逗号、制表符等)
- 遇到文件结束符时:选择「停止线程」
- 其他:按需设置是否允许带引号、文件编码等
- HTTP请求:API B
- 配置请求方法、URL,在参数/请求体中引用CSV变量(如
${param1})
- 配置请求方法、URL,在参数/请求体中引用CSV变量(如
- (可选)响应断言、监听器(查看结果树、聚合报告等)
关键补充说明
- 线程组执行顺序:在测试计划的「线程组行为」中,设置「运行线程组顺序」为「按顺序运行」,确保线程组1先完成API A的初始化重试,再启动线程组2。
- 线程组结束判断:如果没有安装
jmeter-plugins-functions插件,可改用全局变量实现:在线程组2的最后添加BeanShell后置处理器,写入props.put("apiBFinished", "true");,然后线程组1的最后一个While Controller条件改为${__jexl3(${__property(apiBFinished, false)} == false,)}。 - 重试逻辑:第一个While Controller会循环调用API A,直到响应断言通过(状态码200),之后进入定时调用的循环逻辑。
内容的提问来源于stack exchange,提问作者ace
相关产品推荐
相关产品推荐

