你第一个测试
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 界面

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

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

解读性能测试结果是相当复杂的(且大多数内容超出了本手册的范围),但如果您的图表开始出现如下所示的情况,这意味着目标服务/系统无法处理负载,您已经找到了瓶颈。 当我们增加到约 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 的运行 以获取更多细节。
下一步
现在,让我们更深入地了解 locustfiles 以及它们可以做的事情:请参阅 编写 locustfile。