第一个 Locust 案例

一. 案例


在普通的python文件中指定了locust性能测试:

import time
from locust import HttpUser, task, between

class QuickstartUser(HttpUser):
    wait_time = between(1, 2)

    @task
    def index_page(self):
        self.client.get("/hello")
        self.client.get("/world")

    @task(3)
    def view_item(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"})

接下来我们分析一下上面的代码

import time
from locust import HttpUser, task, between

locust 文件只是普通的Python模块,它可以从其他文件或包中导入代码。

class QuickstartUser(HttpUser):

模拟用户的行为由locust文件中的类表示。当您开始测试运行时,Locust将为每个并发用户创建该类的实例。

wait_time = between(1, 2)

该类定义了一个wait_time,它将使模拟用户在每个任务(见下文)执行后的1到2秒之间等待。

@task
def index_page(self):
    ...

用@task属性声明的方法是Locust文件的核心。对于每个正在运行的用户,Locust都会创建一个greenlet(微线程),它将调用这些方法。

@task
def index_page(self):
    self.client.get("/hello")
    self.client.get("/world")

self.client属性使进行由Locust记录的HTTP调用成为可能。有关如何发出其他类型的请求,验证响应等的信息,请参阅使用HTTP客户端。

@task(3)
def view_item(self):
    ...

任务是随机选择的,但是您可以赋予它们不同的权重。上面的配置将使Locust选择view_item的可能性是index_page的三倍。

@task(3)
def view_item(self):
    for item_id in range(10)
        self.client.get(f"/item?id={item_id}", name="/item")
        time.sleep(1)

在view_item任务中,我们通过使用基于变量的查询参数来加载10个不同的URL。为了使Locust的统计信息中没有10个单独的条目(由于统计信息是按URL分组的,因此)我们使用name参数将所有这些请求分组在名为“ / item”的条目下。

def on_start(self):
    self.client.post("/login", json={"username":"foo", "password":"bar"})

如果声明一个名为on_start的方法,则该方法将为每个用户调用一次


二. 运行 Locust


将上面的代码放在当前目录中名为locustfile.py的文件中,然后运行:

locust

如果您的locust文件位于其他位置,则可以使用-f指定它

locust -f locust_files/my_locust_file.py

提示:要查看所有可用选项,请输入:locust --help或检查Configuration


三. locust 的网络界面


使用上述命令行之一启动Locust后,应该打开浏览器并将其指向http://127.0.0.1:8089。然后,您应该会收到类似以下内容的问候:

_images/webui-splash-screenshot.png

填写表格并尝试! (但请注意,如果您不更改Locust文件以匹配实际目标系统,则大多数情况下会收到错误响应)

_images/webui-running-statistics.png _images/webui-running-charts.png

四. 更多选项

要运行分布在多个Python进程或计算机上的Locust,可以使用--master命令行参数启动单个Locust主进程,然后使用--worker命令行参数启动任意数量的Locust worker进程。

要直接开始测试而不使用Web界面,请使用--headless。也可以通过环境变量或在配置文件中设置参数。

五.如何写一个真正的locust文件


上面的示例仅是最低要求,想要学习更多的内容,请关注问我技术平台


全部评论(0)