Locust作为lib运行时未能触发事件



下面的代码来自教程。我只是添加了一些代码来触发test_start事件(不确定我是否在正确的地方触发它?)并收听inittest_start事件。

import gevent
from locust import HttpUser, task, events
from locust.env import Environment
from locust.stats import stats_printer, stats_history
from locust.log import setup_logging
setup_logging("INFO", None)

class MyUser(HttpUser):
host = "https://docs.locust.io"
@task
def t(self):
self.client.get("/")
@events.init.add_listener
def on_locust_init(**kwargs):
print("on locust init ...")

@events.test_start.add_listener
def on_test_start(**kwargs):
print("on test start ...")

# setup Environment and Runner
env = Environment(user_classes=[MyUser])
runner = env.create_local_runner()
# start a WebUI instance
web_ui = env.create_web_ui("127.0.0.1", 8089)
# execute init event handlers (only really needed if you have registered any)
env.events.init.fire(environment=env, runner=runner, web_ui=web_ui)
# start a greenlet that periodically outputs the current stats
gevent.spawn(stats_printer(env.stats))
# start a greenlet that save current stats to history
gevent.spawn(stats_history, env.runner)
# start the test
runner.start(1, spawn_rate=1)
# execute test_start event handlers (only really needed if you have registered any)
env.events.test_start.fire(environment=env, runner=runner, web_ui=web_ui)
# in 10 seconds stop the runner
gevent.spawn_later(10, lambda: runner.quit())
# wait for the greenlets
runner.greenlet.join()
# stop the web server for good measures
web_ui.stop()

当我将其作为库(例如python use_as_lib.py)运行时,MyUser中的两条消息没有打印。但是,如果我删除那些作为lib运行的代码,并将其作为工具运行(例如locust -f use_as_lib.py --headless -u 1 -r 1 -t=10s),则消息将在控制台中打印出来。似乎我错过了什么…

这是我的蝗虫版本。

locust 2.13.0 from /Users/myuser/workspace/tmp/try_python/venv/lib/python3.8/site-packages/locust (python 3.8.12)

任何想法?谢谢!

稍微检查一下源代码,我需要添加蝗虫。().

# ...
env = Environment(user_classes=[MyUser], events=events)

我认为use_as_lib示例需要更新。

最新更新