Locust:如何在test_start事件中获取各Worker的精确用户数?
如何在Locust的test_start事件中获取每个Worker的精确用户数
你之前用平均值估算的方法在用户数无法被Worker数整除时确实会不准确,要获取精确值可以分两种场景处理:
1. 在Worker进程中获取自身的精确用户数
每个Worker进程启动后,Locust已经为它分配好了精确的目标用户数,直接通过WorkerRunner的target_user_count属性就能拿到:
from locust import events from locust.runners import WorkerRunner @events.test_start.add_listener def on_test_start(environment, **_kwargs): if isinstance(environment.runner, WorkerRunner): exact_user_count = environment.runner.target_user_count print(f"当前Worker的精确目标用户数: {exact_user_count}")
2. 在Master进程中汇总所有Worker的精确用户数
Master和Worker是独立进程,无法直接共享数据,需要通过Worker向Master上报自身的目标用户数:
第一步:在Worker端修改上报数据,添加目标用户数
from locust import events from locust.runners import WorkerRunner @events.worker_report.add_listener def on_worker_report_send(environment, data, **_kwargs): if isinstance(environment.runner, WorkerRunner): # 把当前Worker的目标用户数添加到上报数据中 data["target_user_count"] = environment.runner.target_user_count
第二步:在Master端接收并存储各Worker的用户数
from locust import events from locust.runners import MasterRunner # 用于存储每个Worker的用户数,key为Worker的client_id worker_user_counts = {} @events.test_start.add_listener def on_test_start(environment, **_kwargs): if isinstance(environment.runner, MasterRunner): print("准备接收Worker的用户数上报...") @events.worker_report.add_listener def on_worker_report_receive(client_id, data, **_kwargs): # 从上报数据中提取目标用户数并存储 worker_user_counts[client_id] = data.get("target_user_count") print(f"收到Worker {client_id} 的目标用户数: {worker_user_counts[client_id]}")
这样不管用户数怎么分配,你都能获取到每个Worker的精确目标用户数了。
内容的提问来源于stack exchange,提问作者Pelit
相关产品推荐
相关产品推荐

