1. Locust的hack之路- 压测脚本的传输及自启动slaves

      刚开始使用Locust压测脚本进行分布式压测的时候,往往需要8个或更多的slave来支持性能测试,因为一直以来都是习惯在windows下写python脚本,所以在windows下写好脚本,然后调试好后,而压测机是linux机器,每次压测都要先把压测文件拷贝到linux的压测机,然后手动一个一个slave的启动,很费时费力。这个时间就考虑有没有更好的方式支持一条命令行就把这些事给干了,而我只要关注压测过程。

     要实现这样的目标,就得要有东西支持跨机器传输文件及命令的传输,而且也考虑到后面需要收集相关机器的性能指标,就开始打算写一个monitor。这样每台机器都有一个monitor,和master机器的通道就打通了。
    
    借鉴Locust的实现方式,monitor与master之间的通讯也是使用pyzmq的方式。首先定义一个BaseSocket的类,提供Send和recv的方法,然后定义个Client类,开启一个默认port是5530的监听服务,另外提供一个方法连接master机器的方法。 1. Locust的hack之路- 压测脚本的传输及自启动slaves_第1张图片
接下来在另外一个runner的文件里开一个进程worker,来接受从master发过来的各种命令,如下图
1. Locust的hack之路- 压测脚本的传输及自启动slaves_第2张图片

其中的send_file和start_slaves就是来到达开始碰到的问题,置于其他后面或做解释。

   要到达目标master在启动locust服务的时候需要做相应的动作,这就开始对现成Locust的代码的二次开发。
1. 增加启动参数支持,slaves-host用来指定要负载机,可以一台或多台,中间已,隔开,同事增加slaves-count参数来指定不用负载机开启的slaves的数量,同样以,隔开
1. Locust的hack之路- 压测脚本的传输及自启动slaves_第3张图片
2. 连接指定的slave负载机,然后传输测试脚本,及开启相应数量的slaves
1. Locust的hack之路- 压测脚本的传输及自启动slaves_第4张图片

回到client的monitor中
1. Monitor的client接收到connect_server的命令后,调优zmqrpc的connectToMaster的方法与master建立连接
1. Locust的hack之路- 压测脚本的传输及自启动slaves_第5张图片
2. 接收到send_file的命令,把文件内容保存在本地一个临时的文件中
1. Locust的hack之路- 压测脚本的传输及自启动slaves_第6张图片
3. 接收到start_slaves命令,使用接收到测试文件启动相应数量的slaves
1. Locust的hack之路- 压测脚本的传输及自启动slaves_第7张图片

通过monitor工具在各负载机开启的服务,与master机器建立通讯,实现了一键启动达到传输测试文件及开始slaves,可以直接进入压测,省去先前重复繁琐的工作。同时有了这个monitor后面就可以开展更多的hack工作了。

你可能感兴趣的:(性能测试)