1.Locust特点
-
以纯Python方式编写用户脚本,提供极大自由度。
-
用户脚本可以串行方式编写,Locust会通过轻量级进程/协程产生并发,无需自己做并发编程。
-
并发量大,借助于gevent库,Locust能产生成千上万并发请求。
-
开销小,Locust用户运行时开销很小。
-
良好的Web UI对性能结果实时监测。
-
能测任何系统任何协议,只需要写个client即可。
-
开放REST API,尽情发挥。
2.安装Locust
安装时会一并安装依赖库: Installing collected packages: Werkzeug, pywin32, zope.event, greenlet, gevent, geventhttpclient, itsdangerous, flask, Flask-BasicAuth, ConfigArgParse, pyzmq, psutil, locust 能看出来flask为Locust提供了Web功能。
3.快速上手
-
编写Python用户脚本。
-
使用
locust
命令执行性能测试。 -
(可选)通过Web界面监测结果。
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”})
也可以通过 -f
指定某个目录文件:$ locust -f locust_files/my_locust_file.py
4.脚本解析
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”})
小结
参考资料: https://locust.io/ https://docs.locust.io/en/stable/
我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。
有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。
原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!
Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典