首先带着问题找答案。。。
思考:分布式运行时,怎么控制什么时间停止压测?
启动master时可以传参:-t或者--run-time
先来看下关于这个参数的介绍:(文件:argument_parser.py)
运行指定的时间之后停止,例如300s,20m,3h,1h30m等等,只能跟--headless一起结合使用,默认是一直运行的
--headless 是指无图形模式启动,对应于locust0.*版本的--no-web
紧接着看main.py这个文件:
如果指定了run_time参数,会启动一个定时任务,这个定时任务会在指定的时间之后运行一个事件:runner.quit() ,也就是退出runner
接着看下runners.py文件
第一步:首先master先判断当前状态如果不是ready,stopped,stopping,则 修改状态为stopping,并且遍历slave,给每个slave发送stop消息, 紧着触发test_stop事件,
第二步:遍历slave,给每个slave发送quit消息,然后睡眠0.5s,然后杀死协程
其中,绿色方框里面那句,虽然触发了test_stop事件,但是没找到代码里面给test_stop事件注册监听器(有知道的大佬欢迎评论留言。。。。。)
slave收到stop的消息之后:更新状态为cleanup,杀死新增用户的协程(如果存在并且不是ready),停止用户,更新状态为stopped,CPU日志警告,给master发送client_stopped的消息,发送client_ready的消息,设置worker状态为ready
slave收到quit的消息之后:更新状态为cleanup,杀死新增用户的协程(如果存在并且不是ready),停止用户,更新状态为stopped,CPU日志警告,触发report_to_master事件,给master发送stats消息(发送一个最终的报告,以防存在任何没有被上报的采样数据),杀死协程