Locust是一个针对Python技术栈的开源性能测试工具。Locust直译为蝗虫,意思是可以像蝗虫一样产生成千上万的并发用户。Locust可不是小众,从它的Github上的Star数量就可以看出:链接:https://github.com/locustio/locust截至本文撰写之时,共有15951个Star。Locust生态良好,已经被多家国外公司(包括世界500强)投入使用:从这点来说,Locust是一个值得学习和掌握的工具。Python的神奇之处在于简单,基于Python的Locust也能给对性能测试还一头雾水的我们带来启发。Locust特性用纯Python编写用户脚本,提供极大的自由度。用户脚本可以串行编写,Locust会通过轻量级进程/协程产生并发,不需要自己做并发编程。并发量大。借助gevent库,Locust可以生成数千个并发请求。低开销,Locust用户运行时的开销非常小。良好的WebUI实时监控性能结果。可以测试任何系统的任何协议,只需要写一个客户端。打开RESTAPI,让它随心所欲地发挥作用。安装Locust需要Python3.6及以上版本。执行pip命令:$pipinstalllocust验证是否安装成功:$locust-V将依赖库一起安装:Installingcollectedpackages:Werkzeug,pywin32,zope.event,greenlet,gevent,geventhttpclient,itsdangerous,flask,Flask-BasicAuth,ConfigArgParse,pyzmq,psutil,locust可以看到flask为Locust提供了Web功能。快速开始使用Locust通常遵循以下步骤:编写Python用户脚本。使用locust命令执行性能测试。(可选)通过Web界面监控结果。示例代码如下,创建一个locustfile.py文件:importtimefromlocustimportHttpUser,task,betweenclassQuickstartUser(HttpUser):wait_time=between(1,2.5)@taskdefhello_world(self):self.client.get("/hello")self。client.get("/world")@task(3)defview_items(self):foritem_idinrange(10):self.client.get(f"/item?id={item_id}",name="/item")时间.sleep(1)defon_start(self):self.client.post("/login",json={"username":"foo","password":"bar"})切换到locustfile.py所在目录文件所在,执行命令:$locust也可以通过-f指定一个目录文件:运行$locust-flocust_files/my_locust_file.py后,打开http://127.0.0.1:8089可以看到web界面:填好后在信息中,就可以开始压力测试了。Web界面提供结果统计数据:以及性能指标趋势图:脚本分析示例脚本分析如下:#Locust用户脚本是Python模块importtimefromlocustimportHttpUser,task,between#该类继承自HttpUserclassQuickstartUser(HttpUser):#Each模拟用户等待1~2.5秒wait_time=between(1,2.5)#@task修饰的会并发执行@taskdefhello_world(self):#client属性是一个HttpSession实例,用于发送HTTP请求self.client。get("/hello")self.client.get("/world")#每个类只会有一个任务被选中执行#3代表权重weight#权重越大越容易被选中执行#view_items比hello_wolrd被选中执行的可能性高3倍@task(3)defview_items(self):foritem_idinrange(10):#name参数用来对统计结果按照同名进行分组#这里防止10条不同的记录来自不同的URL参数,不易观察#summarize10into1"/item"记录self.client.get(f"/item?id={item_id}",name="/item")time.sleep(1)#每个模拟用户都会执行defon_start(self):self。client.post("/login",json={"username":"foo","password":"bar"})总结本文首先了解了Locust的背景和生态,值得学习。对于Python技术栈更是如此。然后介绍了使用pip命令安装Locust,发现顺便安装了flask,Locust的Web功能是flask提供的。然后给出示例代码,按照步骤开始使用Locust。最后对示例代码进行了分析,只是想尝尝鲜。Locustfile实际上应该如何编写?
