如何在JMeter中创建不同延迟的请求?附用户行为场景需求
嘿,这个场景我之前做过类似的,用JMeter的线程组、定时器和循环控制器就能完美实现,我给你一步步拆解:
整体思路
核心是用线程组模拟用户,配合定时器控制请求间隔,再用循环控制器让用户重复执行定时任务,刚好匹配你三个需求的组合。
1. 实现「每5秒新增一名用户并发送ping请求」
这部分靠线程组的配置就能搞定:
- 新建一个线程组,在「线程数」里设置你需要的总用户数(比如要跑2小时的话,2小时=7200秒,7200/5=1440个用户,就填1440)。
- 「Ramp-Up时间」设为
(线程数-1)*5秒(比如1440个用户就是1439*5=7195秒),这样JMeter会每隔5秒启动一个新线程(也就是新增一名用户)。 - 在线程组下直接加一个HTTP请求,配置成你的ping请求——这个就是用户刚上线时发送的第一次ping。
2. 实现「每位用户每5分钟发送一次ping请求」
要让每个用户持续定时发ping,用循环控制器+固定定时器的组合:
- 在线程组下新建一个循环控制器,把「循环次数」设为「永远」(或者根据测试时长计算总循环次数)。
- 在循环控制器里加一个固定定时器,设置延迟为
300000毫秒(5分钟=300秒,换算成毫秒就是300000)。 - 定时器下面再加一个HTTP请求,配置成ping请求——这样每个用户启动后,会每隔5分钟重复执行这个ping请求。
小技巧:如果不想分开初始ping和定时ping,可以把初始ping也放进这个循环控制器里,然后用JSR223定时器替代固定定时器,让第一次循环不延迟,之后每次延迟5分钟。定时器里写Groovy代码:
if (vars.getIteration() > 1) { return 300000; // 非第一次循环延迟5分钟 } else { return 0; // 第一次循环立即执行(对应初始ping) }这样就不用维护两个ping请求,更简洁。
3. 实现「每位用户每30分钟上传一次文件」
和定时ping的逻辑类似,只是时间间隔不同:
- 在线程组下再建一个独立的循环控制器,循环次数设为「永远」。
- 里面加一个固定定时器,设置延迟为
1800000毫秒(30分钟=1800秒=1800000毫秒)。 - 定时器下面加一个HTTP请求,配置文件上传:
- 方法选POST,勾选「使用multipart/form-data」。
- 在「文件上传」区域添加你的文件路径、参数名(比如后端要求的
file参数)、MIME类型(比如application/octet-stream)。 - 如果需要每个用户上传不同文件,可以用CSV数据文件设置来参数化文件路径。
最终结构参考
你的JMeter测试计划结构大概是这样:
- 线程组(线程数:N,Ramp-Up:(N-1)*5秒,循环次数:永远)
- HTTP请求:初始Ping(可选,用JSR223定时器的话可以去掉)
- 循环控制器(循环次数:永远)
- JSR223定时器(或固定定时器)
- HTTP请求:定时Ping
- 循环控制器(循环次数:永远)
- 固定定时器(1800000ms)
- HTTP请求:文件上传
注意事项
- 线程数要根据你的测试时长来算,确保在测试结束前能按5秒间隔启动完所有用户。
- 如果测试有时间限制,线程组的「循环次数」可以设为总时长除以请求间隔(比如测试2小时,5分钟一次ping,就是24次循环)。
- 记得给每个请求加查看结果树或者聚合报告来验证请求是否按预期执行。
内容的提问来源于stack exchange,提问作者Limbo
相关产品推荐
相关产品推荐

