• locust的使用


     

    一、简介

    Locust是一款使用Python编写的压力测试工具,本篇总结会介绍在实际测试过程中遇到的问题

    https://www.locust.io/

    使用Locust的原因是因为可以模拟的用户数量可以通过添加硬件来增长,相对于jmeter来说配置更加方便。

    二、需求描述

    项目采用node+redis+oracle的模式,需要测试出单台服务器的性能瓶颈。

    三、实际测试

    环境的搭建:服务器上只需要安装好Python2.7及以上的版本,然后通过pip安装locust就完成了搭建。

    1、 pip安装(python的包管理工具,没有pip则不能安装第三方库)python有两个主流的包管理工具easy_install.py和pip,easy_install.py是安装python的时候默认安装的,而pip仅以zip文件的形式保存的python目录中,需要我们手动的安装

    【命令】:E:pythonScriptspip.exe

    这里的路径为你安装的python路径,找到安装目录中Scripts文件夹下pip文件即可安装pip(这里已经安装好了)

    2、 gevent库的安装

    【命令】: E:pythonScriptspip.exe install gevent

    3、 flask库的安装

    【命令】:E:pythonScriptspip.exe install flask

    注:如果不知道版本号可以直接安装flask包,系统会安装不同版本的包(不建议使用)

    4、 request库的安装

    【命令】:E:pythonScriptspip.exe install requests==2.18.1

    注:安装库的时候若不知道版本号,可以直接输入命令E:pythonScriptspip.exe install requests== 从报错信息中查看所有的版本号(建议安装最新的版本)

    5、 msgpack-python库的安装

    【命令】:E:pythonScriptspip.exe install msgpack-python==0.4.8

    6、 six库的安装

    【命令】:E:pythonScriptspip.exe install six==1.11.0

    7、 pyzmq库的安装

    【命令】:E:pythonScriptspip.exe install pyzmq

    8、 locust的安装(最后一步)

    【命令】:E:pythonScriptspip.exe install locustio

     

    E:Python27python-2.7.13.msi

     

    脚本编写:根据需求编写好python脚本,放到服务器上如 locust1.py。

     

    脚本运行:通常使用的是主从模式来运行脚本,这样能够方便进程多开。

    打开python27目录,输入命令:

    cd  /d E:Python27locust-master

    locust -f locust1.py --master   

    该命令运行后会生成一个主进程进行管理,主进程只需要一个。

     

     

    locust -f locu.py --slave   

    该命令运行后会有一个子进程启动,根据需要可以多次运行就会开启多个子进程,子进程用来模拟用户数量。

    如果需要多进程就要打开多个窗口开进程

     

     

     

    以上命令运行后或默认开启8089 端口,通过浏览器访问本地8089端口就能进入web界进行控制。

    访问地址: http://localhost:8089slave 就是开启的子进程数量。

     

     

     

     

    如果不同的机器,加后缀主机masterIP

     

    locust -f ../Python27/load_test1.py  --slave   --master-host=*ip

     

    3.用户数量的详细解释

    web界面的user 数量表示并发数,也就是每次访问的并发连接数。实践的时候用户数量是300,表示每次访问有300个用户同时访问,吞吐量能达到2000/s,说明在一秒的时间内服务器响应了大约7次,那么300的用户耗费的时间就是140ms左右。

    4.用户数量与slvae关系

    用户数量是300,slave为3,那么每个slave会平均分配发送的用户量100,与jmerter分布式不一样。

    五、最终测试结果

    服务器配置:CPU 8核 内存16G  
    承受最大业务量900万次请求数,占用内存12G,占用磁盘空间23G。
    redis与业务量关系 80万请求数占用1G redis内存
    磁盘与业务量关系  80万请求数占用2G 磁盘空间

     

     

    附录:

     

    locust -f ../locust-master/load_test.py  --master

    重新开终端窗口

    locust -f ../locust-master/load_test.py  --slave

     

     

     

    远程链接阿里云服务器

    Win10系统下使用“WIN+R”组合快捷键打开运行对话框,然后输入“mstsc",点击确定

    输入服务器IP

     

     

     

    QPS: 每秒钟处理完请求的次数;注意这里是处理完。具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加11秒后counter=QPS

     

    TPS:每秒钟处理完的事务次数,一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多。

     

    并发量:系统能同时处理的请求数

     

    RT:响应时间,处理一次请求所需要的平均处理时间

     

    计算关系:

     

    QPS = 并发量 / 平均响应时间

     

    并发量 = QPS * 平均响应时间

     

     

     

    对比:

    测试场景:

    对比locusthttpLocust库、python2基础库httplib python3基础库http.client的效率和压力

     

    测试接口:通过GET获取URL返回值

    Slave机配置:单台816G

    Slave实例:10

    对比结果:httplocustRPS最大值4Kpython2的最大值12Kpython3的最大值15K

     

     

    JmeterTPS最大值是34K

     

     

     

     

    不因未知而恐惧
  • 相关阅读:
    整理一下看过的图像识别的文章(人脸、车牌、验证码)
    从大象安全套到超级表格
    HDU 3157 Crazy Circuits(有源汇上下界最小流)
    struts2学习笔记(5)---自己定义拦截器
    【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能
    ConvertHelper与泛型集合
    G711
    关于众筹的一些经验,希望能有帮助
    Java基础 Day14 泛型
    LeetCode144:Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/kummer9056/p/9702339.html
Copyright © 2020-2023  润新知