Skip to main content

locust🔨

locust

locust 模块:大规模的并发测试,可以实时查看吞吐量、响应时间和错误和/或导出以供以后分析。

locust 需要创建一个locustfile.py的文件,他只是一个普通的 Python 模块,它可以从其他文件或包中导入代码。

import time
from locust import HttpUser, task, between

# 要使文件成为有效的 locustfile,它必须至少包含一个继承自 User 的类。
class QuickstartUser(HttpUser):
# 模拟用户在执行每个任务(见下文)后等待 1 到 5 秒。
wait_time = between(1, 5)

# 用 @task 修饰的方法是 locust 文件的核心。对于每个正在运行的 User,Locust 都会创建一个 greenlet(协程或“微线程”),它将调用这些方法。任务中的代码是按顺序执行的(它只是常规的 Python 代码),因此在收到来自 /hello 的响应之前,不会调用 /world。
@task
def hello_world(self):
self.client.get("/hello")
self.client.get("/world")

# 我们通过使用 @task 装饰两个方法来声明两个任务,其中一个方法被赋予了更高的权重 (3)。当我们的 QuickstartUser 运行时,它将选择声明的任务之一 - 在本例中为 hello_world 或 view_items - 并执行它。任务是随机选择的,但您可以为其赋予不同的权重。上述配置将使 Locust 采摘 view_items 的可能性是 hello_world 的三倍。当任务完成执行后,用户将休眠其指定的等待时间(在本例中为 1 到 5 秒)。然后它将选择一个新任务。
@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)
# 只有用 @task 修饰的方法才会被选中,因此你可以用任何你喜欢的方式定义自己的内部帮助程序方法。
def on_start(self):
self.client.post("/login", json={"username":"foo", "password":"bar"})

启动压力测试可以在通过 locust 命令,这将会启动一个可视化操作界面。输入测试时间、并发用户、目标网址等信息即可查看压测结果图表。

如果在服务器上执行,可以使用命令行locust --headless --users 10 --spawn-rate 1 -H http://your-server.com

更多示例可以查看官方文档