如何基于UI传入的host值为Locust动态分配TaskSet任务集
错误原因说明
- 首次报错(无tasks定义):初始代码仅在
on_start方法内声明了局部变量tasks,未赋值给User实例的self.tasks属性,且Locust初始化User类时会提前校验tasks配置,初始状态无有效tasks就会抛出异常。 - 二次报错(KeyError: 0):Locust运行时调度任务时要求
tasks属性为列表类型,你赋值的是字典格式,random.choice尝试对字典按索引取值时就会抛出键不存在的错误。同时保留的占位空任务会和动态添加的任务冲突,默认调度流程会持续执行空任务。
可直接运行的实现代码
无需重启已运行的Locust实例,修改代码后Locust的热重载机制会自动加载生效:
from locust import HttpUser, TaskSet, task, StopUser class HelloTask(TaskSet): @task def something(self): print("Hello") class WorldTask(TaskSet): @task def something(self): print("World") class LoadTestUser(HttpUser): # 初始赋值空列表,通过Locust初始化校验 tasks = [] def on_start(self): # 根据UI传入的host动态分配任务 if self.host == "hello": # 列表格式,如需配置权重可重复添加对应类,例如[HelloTask, HelloTask]等价于权重2 self.tasks = [HelloTask] else: self.tasks = [WorldTask] # 手动触发首次任务调度 self.schedule_task(self.get_next_task()) # 终止当前默认调度流程,避免执行空逻辑 raise StopUser()
内容的提问来源于stack exchange,提问作者streetsoldier
相关产品推荐
相关产品推荐

