你第一个测试

Locust 测试本质上只是一个 Python 程序,它向您想要测试的系统发送请求。这使得它非常灵活,尤其擅长实现复杂的用户流程。但它也可以执行简单的测试,下面是一个示例:

from locust import HttpUser, task

class HelloWorldUser(HttpUser):
    @task
    def hello_world(self):
        self.client.get("/hello")
        self.client.get("/world")

这个用户将依次向 /hello/world 发送 HTTP 请求,并不断重复这个过程。要获取完整的解释和一个更实际的示例,请参阅 编写 locustfile

/hello/world 替换为您要测试的网站/服务上的实际路径,将代码保存为名为 locustfile.py 的文件并放在当前目录下,然后运行 Locust:

$ locust

[2021-07-24 09:58:46,215] .../INFO/locust.main: Starting web interface at http://0.0.0.0:8089
[2021-07-24 09:58:46,285] .../INFO/locust.main: Starting Locust 2.32.5

Locust 的 Web 界面

![Web UI Splash](images/webui-splash-screenshot.png)

提供您服务器的主机名并尝试进行测试!以下截图展示了当使用 50 个并发用户进行此测试时,逐步增加用户速率为 1 用户/秒的情况:

![Running Statistics](images/webui-running-statistics.png)

在 "Charts" 标签下,您可以查看每秒请求数(RPS)、响应时间和运行用户数等信息:

![Bottlenecked Server](images/bottlenecked_server.png)

解读性能测试结果是相当复杂的(且大多数内容超出了本手册的范围),但如果您的图表开始出现如下所示的情况,这意味着目标服务/系统无法处理负载,您已经找到了瓶颈。

当我们增加到约 20 个用户时,响应时间开始快速增加,即使 Locust 仍然在生成更多的用户,每秒请求数也不再增加。目标服务已经 "过载" 或 "饱和"。

如果您的响应时间没有增加,请继续增加更多的用户,直到找到服务的极限,或者庆祝您的服务已经足够高效,能够应对预期负载。

如果您在生成足够负载以达到系统饱和时遇到问题,可以参考 增加请求速率

命令行直接使用 / 无头模式

使用 Locust 的 Web UI 是完全可选的。您可以在命令行上提供负载参数,并以文本形式获取结果报告:

locust --headless --users 10 --spawn-rate 1 -H http://your-server.com

[2021-07-24 10:41:10,947] .../INFO/locust.main: No run time limit set, use CTRL+C to interrupt.
[2021-07-24 10:41:10,947] .../INFO/locust.main: Starting Locust 2.32.5
[2021-07-24 10:41:10,949] .../INFO/locust.runners: Ramping to 10 users using a 1.00 spawn rate
Name              # reqs      # fails  |     Avg     Min     Max  Median  |   req/s failures/s
----------------------------------------------------------------------------------------------
GET /hello             1     0(0.00%)  |     115     115     115     115  |    0.00    0.00
GET /world             1     0(0.00%)  |     119     119     119     119  |    0.00    0.00
----------------------------------------------------------------------------------------------
Aggregated             2     0(0.00%)  |     117     115     119     117  |    0.00    0.00

[2021-07-24 10:44:42,484] .../INFO/locust.runners: All users spawned: {"HelloWorldUser": 10} (10 total users)

请参阅 没有 Web UI 的运行 以获取更多细节。

更多选项

要在多个 Python 进程或机器上分布式运行 Locust,您可以启动一个 Locust 主进程,并使用 --master 命令行参数,然后使用 --worker 命令行参数启动任意数量的 Locust 工作进程。有关更多信息,请参阅 分布式负载生成

要查看所有可用选项,请输入 locust --help 或查看 配置 部分。

下一步

现在,让我们更深入地了解 locustfiles 以及它们可以做的事情:请参阅 编写 locustfile