Locust 性能测试最新1.1.1 版本实战
- 起因
- 需求
- 代码及运行结果
- 分布式运行
- https://www.lanqiao.cn/courses/2947,提供准备好的云主机ros环境,进行实操,课程包括了 Topic 通讯, Service 通讯,ROS 自定义消息,URDF可视化,TF坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。
起因
受人之托。网上大都是好久之前旧版的demo,而且demo就只是demo。简单写下用法,很少有结合实际的需求进行讲解。
需求
只使用几个测试账号,模拟N个用户进行数据的上传。比如我有3个账号,要模拟100个用户的压测,只是调用3次登录接口,拿到3个用户的token后,这100个用户循环调用这3个账户的token进行一系列操作。
代码及运行结果
- 定义一个运行类继承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
- 下一个task就是,用户取出来一组key和token用来给下面task的接口使用,然后再把取出来的put进去,供其他用户循环使用
- 根据后台接口编写对应的上传数据的准备工作,self.tasteUser、 self.tasteToken是上面task取出来的(代码中的api是我封装的接口请求方法)
- 完成文件上传
- 执行 locust -f locust_slave1.py --host=https://xxxxxxxxxxx,只会登录3次但是会上传10次
分布式运行
- 创建一个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 指定主服务地址)
- 执行master后等待从机的连接
- 执行两个slave后,master显示运行的结果
- slave显示接口详情
至此Locust的讲解就到这里了,有问题请多指正。互相学习、共同努力