Locust のスクリプトで、各イベントをフックにリスナーを登録することができる。 https://docs.locust.io/en/stable/extending-locust.html

より詳しくはこちら https://docs.locust.io/en/stable/api.html#event-hooks

headlessautostart 、Web UIで実行した場合のどれでも同じようなタイミングで実行される

# Locust起動直後に実行される処理
@events.init.add_listener
def locust_on_init(environment: Environment, runner: locust_runners.Runner, **kwargs):
    logging.info("locust init event received")
 
# 負荷試験開始時に実行される処理
@events.test_start.add_listener
def locust_on_test_start(environment: Environment, **kwargs):
    logging.info("locust test_start event received")
 
# 負荷試験終了時に実行される処理
@events.test_stop.add_listener
def locust_on_test_stop(environment: Environment, **kwargs):
    logging.info("locust test_stop event received")
 
# Locustプロセス終了直前に実行される処理
@events.quitting.add_listener
def locust_on_quitting(environment: Environment, **kwargs):
    logging.info("locust quitting event received")
 

自動実行時にtest_startイベントに時間のかかる処理を登録するときの注意

Locust 自動実行する のようにして --run-time を指定しているのにその時間実行されなかったり、もっと悪いことに実行が終了しないことがあった。

@events.test_start.add_listener
def locust_on_test_start(environment: Environment, **kwargs):
    logging.info("locust test_start event received")
    # 時間のかかる処理
    time.sleep(30)

調査したところ test_start イベントで時間のかかる処理を実行していた。 この中の処理も run-time の実行時間に含まれるため、その分負荷試験の実行時間が減っていた。 さらに、test_startrun-time の時間を過ぎると、負荷試験を終了する処理はすでに呼ばれたことになっていてもう呼ばれない。その上で test_start が終わったタイミングで負荷試験が開始してしまうので終了しない。負荷試験を開始しないでほしいのだがそうなっていない。

コードではこの辺 https://github.com/locustio/locust/blob/b7a63e4e2f302e2273bc22bb8f57a54bfa7b9c83/locust/main.py#L548

--run-time argument includes test_start event duration since the upgrade to v2 · Issue #2319 · locustio/locust favicon GitHub
--run-time argument includes test_start event duration since the upgrade to v2 · Issue #2319 · locustio/locust
Describe the bug The behaviour of --run-time argument has changed since the upgrade to v2. In later versions, it controls the total duration of the test including test_start event, while in v1 it d...
--run-time argument includes test_start event duration since the upgrade to v2 · Issue #2319 · locustio/locust

対策としては、実行タイミングが変わってしまうが init に処理を移すことかな…