locust中的监听器
locust的master相关的几个监听器:
心跳监听器:
一个while循环,不断判断所有client当前的心跳状况,如果有一个client失去了心跳,就打印了一个警告日志,如果所有client都失去了心跳,就主动停止测试
client监听器:
一个while循环,不断接受client发送的消息,根据发送消息的类型的不同做出相应的处理
消息类型:
client_ready:client发给master的,代表client已经启动
heartbeat:client发给master的,代表client是存活状态
swap:master发给client,告诉client开始扩充用户数
swapping:client发给master的,代表正在扩充用户数
complete_swaping:client发给master,代表扩充用户完成达到执行的数量,发送完这个消息之后就开始测试了
stats:client发给master,每隔一定时间就上报结果消息给master
client_stopped:client发给master,代表测试结束了
quit:client发给master的,告诉master自己退出了,master收到消息会更新当前可用的client列表,如果所有client都quit了,那么master自己也会stop&&quit
exception:client 发给master的,master会记录异常内容
slave相关的事件:
心跳上报:while循环每隔一段时间就会给master发送心跳消息
消息接收:while循环:一直接受master发送的消息,根据不同的消息类型做出相应的动作
swap:master发给slave,告诉我开始扩展用户
stop:master发给slave,告诉slave停止测试
quit: master发个slave,告诉slave退出
其他的消息类型:注册了监听器的消息类型(但是不等于swap,stop,quit),然后会调用相应的监听器
别的消息类型:报错
结果上报:每隔一段时间上报结果数据
启动master的时候会指定期望的slave的数量,比如指定了2个,那么当master收到2个slave发来的client_ready的消息才会分别给每个slave发送spawn
的消息,并且更新状态是spawning, 当收到所有client发送的spawing_complete的消息的时候更新状态是running
收到client_stopped的消息,会把client那个节点删除
收到quit的消息,会把client删除,当收到所有的client的quit消息的时候,master停止,如果状态不是初始化,已停止,停止中,修改状态是停止中,给他每个client发送停止消息,如果是--headless,非web方式启动,给每个client发送quit消息,然后睡一会,然后自己把自己杀死