Locust是一款Python技术栈的开源的性能测试工具。Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户。
Locust并不小众,从它Github的Star数量就可见一斑:
链接:https://github.com/locustio/l...
截止文章写作时,一共15951Star。
Locust生态良好,它已在多家外企(包含世界500强)投入使用:
如此看来,Locust是十分值得学习和把握的一款工具。
Python的魔力在于化繁为简,基于Python的Locust也能给依然困惑于性能测试的咱们带来启发。
Locust特点
- 以纯Python形式编写用户脚本,提供极大自由度。
- 用户脚本能够串行形式编写,Locust会通过轻量级过程/协程产生并发,无需本人做并发编程。
- 并发量大,借助于gevent库,Locust能产生成千上万并发申请。
- 开销小,Locust用户运行时开销很小。
- 良好的Web UI对性能后果实时监测。
- 能测任何零碎任何协定,只须要写个client即可。
- 凋谢REST API,纵情施展。
装置Locust
须要Python版本3.6及以上。执行pip命令:
$ pip install locust
验证装置胜利:
$ locust -V
装置时会一并装置依赖库:Installing collected packages: Werkzeug, pywin32, zope.event, greenlet, gevent, geventhttpclient, itsdangerous, flask, Flask-BasicAuth, ConfigArgParse, pyzmq, psutil, locust能看进去flask为Locust提供了Web性能。
疾速上手
应用Locust个别依照以下步骤进行:
- 编写Python用户脚本。
- 应用
locust
命令执行性能测试。 - (可选)通过Web界面监测后果。
示例代码如下,新建locustfile.py文件:
import time from locust import HttpUser, task, between class QuickstartUser(HttpUser): wait_time = between(1, 2.5) @task def hello_world(self): self.client.get("/hello") self.client.get("/world") @task(3) def view_items(self): for item_id in range(10): self.client.get(f"/item?id={item_id}", name="/item") time.sleep(1) def on_start(self): self.client.post("/login", json={"username":"foo", "password":"bar"})
门路切换到locustfile.py文件所在目录,执行命令:
$ locust
也能够通过
-f
指定某个目录文件:$ locust -f locust_files/my_locust_file.py
运行后,关上http://127.0.0.1:8089看到Web...
填写信息后,就能开始压测了。Web界面提供了后果统计数据:
和性能指标走势图:
脚本解析
示例脚本解析如下:
# Locust用户脚本就是Python模块 import time from locust import HttpUser, task, between # 类继承自HttpUser class QuickstartUser(HttpUser): # 每个模仿用户期待1~2.5秒 wait_time = between(1, 2.5) # 被@task装璜的才会并发执行 @task def hello_world(self): # client属性是HttpSession实例,用来发送HTTP申请 self.client.get("/hello") self.client.get("/world") # 每个类只会有一个task被选中执行 # 3代表weight权重 # 权重越大越容易被选中执行 # view_items比hello_wolrd多3倍概率被选中执行 @task(3) def view_items(self): for item_id in range(10): # name参数作用是把统计后果按同一名称进行分组 # 这里避免URL参数不同会产生10个不同记录不便于察看 # 把10个汇总成1个"/item"记录 self.client.get(f"/item?id={item_id}", name="/item") time.sleep(1) # 每个模仿用户开始运行时都会执行 def on_start(self): self.client.post("/login", json={"username":"foo", "password":"bar"})
小结
本文先理解了Locust的背景和生态,它是值得学习的,对于Python技术栈来说更加如此。接着介绍了应用pip命令装置Locust,其中发现顺带装置了flask,Locust的Web性能是flask提供的。
而后给出了一段示例代码,依照步骤上手Locust。最初对示例代码进行了解析,浅尝辄止。locustfile实际上该怎么写呢?
参考资料:
https://locust.io/
https://docs.locust.io/en/sta...
开源前哨
日常分享热门、乏味和实用的开源我的项目。参加保护 10万+ Star 的开源技术资源库,包含:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。