Locust模拟1000非并发用户:如何设置用户特定存活时长?
实现指定存活时长的非并发用户模拟
JMeter 实现方案
- 先配置线程组:设置线程数为1000,将
Ramp-Up时间设为你需要均匀分配用户的总时长(比如1小时内启动完就填3600秒),确保用户按时间均匀启动。 - 控制用户存活时长:添加
Runtime Controller到线程组下,设置运行时长(比如每个用户存活5分钟就填300秒),把所有用户操作逻辑放在这个控制器内,到时间后线程自动终止。 - 进阶精准控制:可以结合
__time()函数和Test Action,计算当前时间与用户启动时间的差值,一旦超过设定时长就触发线程退出逻辑。
Locust 实现方案
通过代码直接控制用户生命周期,灵活性更高:
from locust import HttpUser, task, between import time class AppUser(HttpUser): wait_time = between(1, 3) # 任务间随机等待时间 user_lifetime = 300 # 单个用户存活时长(秒) def on_start(self): self.start_timestamp = time.time() @task def perform_business_action(self): # 检查是否超过存活时长 if time.time() - self.start_timestamp > self.user_lifetime: self.stop() # 执行实际业务请求 self.client.get("/your-app/api/action")
启动时通过--users 1000 --spawn-rate [速率]控制均匀启动,比如1小时启动1000用户,spawn-rate设为1000/3600即可。
通用自定义脚本思路
如果用其他工具或需要完全自定义逻辑,可参考以下Python示例:
import threading import time import requests def single_user_simulation(lifetime): start_time = time.time() while time.time() - start_time < lifetime: # 模拟用户操作 requests.get("http://your-app.com/user-action") time.sleep(2) # 模拟操作间隔 # 配置参数 total_users = 1000 total_rampup_duration = 3600 # 1小时内均匀启动 per_user_lifetime = 300 # 每个用户存活5分钟 # 均匀启动用户 for _ in range(total_users): threading.Thread(target=single_user_simulation, args=(per_user_lifetime,)).start() time.sleep(total_rampup_duration / total_users) # 计算启动间隔
内容的提问来源于stack exchange,提问作者Mark Marky
相关产品推荐
相关产品推荐

