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进行一系列操作。

代码及运行结果

  1. 定义一个运行类继承HttpUser,user_password_list存放所有测试的账号密码,key_token_list存放所有账号登录后的token

c s架构 压力测试 压力测试实战_c s架构 压力测试


2. 定义一个任务类,继承SequentialTaskSet后,任务会顺序执行。onstart方法每个模拟用户只会执行一次,(queue队列中取值,直到取完为止,因为有3个账户所以只会取3次登录3次,如果并发数是100剩下的97个用户会取不到值所以会抛出异常,为了防止这97个用户还没等到这三个账户登陆成功就进行下一个task,需要在这等待几秒钟,等3个用户登录成功key_token_list中有token了再进行下一个task),登录成功后接口中取key和token,存放到key_token_list

c s架构 压力测试 压力测试实战_分布式_02

  1. 下一个task就是,用户取出来一组key和token用来给下面task的接口使用,然后再把取出来的put进去,供其他用户循环使用
  2. c s架构 压力测试 压力测试实战_jmeter_03

  3. 根据后台接口编写对应的上传数据的准备工作,self.tasteUser、 self.tasteToken是上面task取出来的(代码中的api是我封装的接口请求方法)
  4. c s架构 压力测试 压力测试实战_c s架构 压力测试_04

  5. 完成文件上传
  6. c s架构 压力测试 压力测试实战_jmeter_05

  7. 执行 locust -f locust_slave1.py --host=https://xxxxxxxxxxx,只会登录3次但是会上传10次
  8. c s架构 压力测试 压力测试实战_python_06


  9. c s架构 压力测试 压力测试实战_压力测试_07

分布式运行

  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 指定主服务地址)
  1. 执行master后等待从机的连接
  2. c s架构 压力测试 压力测试实战_分布式_08

  3. 执行两个slave后,master显示运行的结果
  4. c s架构 压力测试 压力测试实战_分布式_09

  5. slave显示接口详情
  6. c s架构 压力测试 压力测试实战_分布式_10

至此Locust的讲解就到这里了,有问题请多指正。互相学习、共同努力