You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CLI自定义参数调整Locust的wait_time参数?

问题根源

你的代码出现问题是因为代码执行时序不匹配:

  • 模块加载阶段,MyUser类的定义代码(包括print(custom_wait_time)和wait_time = constant(custom_wait_time))会立即执行,此时events.init的监听函数还未触发,custom_wait_time还是初始的None。
  • events.init监听函数是在Locust解析完命令行参数、完成初始化后才运行的,这时候才会给custom_wait_time赋值,但MyUser类的wait_time已经提前用None初始化完成了。
解决方法

以下两种方案都能解决这个问题:

方案一:将wait_time定义为实例方法

让wait_time在每次调用时才去获取已赋值的custom_wait_time:

custom_wait_time = None

@events.init_command_line_parser.add_listener
def init_parser(parser):
    parser.add_argument("--locust-wait-time",
                      type=int,
                      include_in_web_ui=True,
                      default=1,  # 设置默认值避免无参数时出现None
                      help="Wait time per each request of a user.")

@events.init.add_listener
def _(environment, **kwargs):
    global custom_wait_time
    custom_wait_time = environment.parsed_options.locust_wait_time
    print(custom_wait_time)

class MyUser(HttpUser):
    def wait_time(self):
        return constant(custom_wait_time)()

方案二:在init事件中动态修改类属性

直接在events.init触发后,覆盖MyUser类的wait_time属性:

custom_wait_time = None

@events.init_command_line_parser.add_listener
def init_parser(parser):
    parser.add_argument("--locust-wait-time",
                      type=int,
                      include_in_web_ui=True,
                      default=1,
                      help="Wait time per each request of a user.")

@events.init.add_listener
def _(environment, **kwargs):
    global custom_wait_time
    custom_wait_time = environment.parsed_options.locust_wait_time
    print(custom_wait_time)
    # 动态覆盖类的wait_time属性
    MyUser.wait_time = constant(custom_wait_time)

class MyUser(HttpUser):
    # 先设置默认值,后续会被init事件中的代码覆盖
    wait_time = constant(1)

内容的提问来源于stack exchange,提问作者bavo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:30:31