网上大都是好久之前旧版的demo,而且demo就只是demo。简单写下用法,很少有结合实际的需求进行讲解。
只使用几个测试账号,模拟N个用户进行数据的上传。比如我有3个账号,要模拟100个用户的压测,只是调用3次登录接口,拿到3个用户的token后,这100个用户循环调用这3个账户的token进行一系列操作。
1、定义一个运行类继承HttpUser,user_password_list存放所有测试的账号密码,key_token_list存放所有账号登录后的token
2、定义一个任务类,继承SequentialTaskSet后,任务会顺序执行。onstart方法每个模拟用户只会执行一次,(queue队列中取值,直到取完为止,因为有3个账户所以只会取3次登录3次,如果并发数是100剩下的97个用户会取不到值所以会抛出异常,为了防止这97个用户还没等到这三个账户登陆成功就进行下一个task,需要在这等待几秒钟,等3个用户登录成功key_token_list中有token了再进行下一个task),登录成功后接口中取key和token,存放到key_token_list
3、下一个task就是,用户取出来一组key和token用来给下面task的接口使用,然后再把取出来的put进去,供其他用户循环使用
4、根据后台接口编写对应的上传数据的准备工作,self.tasteUser、 self.tasteToken是上面task取出来的(代码中的api是我封装的接口请求方法)
5、完成文件上传
6、执行 locust -f locust_slave1.py --host=https://xxxxxxxxxxx,只会登录3次但是会上传10次
1、创建一个master,master 节点自身不会模拟任何用户,负责启动运行并查看实时统计数据。然后复制上面的locust_slave1.py,改成locust_slave2.py,把userInfos的账号改成其他的账号,不然两个slave同时运行一个账号会冲突。
master代码:
1. 执行master: locust -f UserTask/locust_master.py --host=https://xxxxxxxxxxx --headless -u 10 -r 10 --run-time 10s -- expect-workers=2 --master --master-bind-host=192.168.1.1 (-f文件名) (--host压测地址) (-u虚拟用户数)(-r 每秒启动数)(--run-time执行时间) (expect-workers=2 启动两个slave) (--master 表示该节点是master)(--master-bind-host 主机服务地址) 2. 执行slave1.py: locust -f locust_slave1.py --host=https://xxxxxxxxxx --worker --master-host=192.168.1.1 (--worker 指定当前为从服务 )(--master-host 指定主服务地址) 3. 执行slave2.py: locust -f locust_slave2.py --host=https://xxxxxxxxxx --worker --master-host=192.168.1.1 (--worker 指定当前为从服务 )(--master-host 指定主服务地址)
2、执行master后等待从机的连接
3、执行两个slave后,master显示运行的结果
slave显示接口详情
至此Locust的讲解就到这里了,有问题请多指正。互相学习、共同努力
作者:野马くん
原文链接:https://blog.csdn.net/qq_20550447/article/details/108205218