开始
一个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请求。有关完整的解释和更实际的例子参考locust脚本编写。
将上述代码保存在当前目录下的locustfile.py中,并在当前目录下运行locust指令:
$locust
[2022-11-23 16:35:23,401] .../INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces)
[2022-11-23 16:35:23,403] .../INFO/locust.main: Starting Locust 2.13.0
Locust的web界面
一旦启动了Locust,打开一个浏览器窗口输入http://localhost:8089。你将会看见下图的界面:
将测试指向你自己的web服务器并进行测试!
下面的屏幕截图显示了使用40个并发用户运行该测试时的情况,ramp-up rate为0.5用户/秒,即Spawn Rate的值为20。
在【Charts】选项卡中,可以看到每秒请求数(RPS)等信息:
响应时间(毫秒):
用户数量:
批注
解释性能测试结果非常复杂(并且大部分超出了本手册的范围),但如果你的图形结果开始看起来像这样,最可能的原因是你的目标服务/系统无法处理您正在处理的负载(它过载或“饱和”)。
最明显的迹象是,当我们达到大约9个用户时,响应时间开始快速增长,以至于每秒请求的数量停止增长,尽管仍在增加新用户。
如果需要一些关于如何开始挖掘服务器端问题的指导,或者你在生成足够的负载以使系统饱和方面遇到困难,请查看Locust常见问题解答。
直接使用命令行 / headless
Locust web UI界面的使用是可选项。你也可以在命令行上提供加载参数,并以文本形式获取结果报告结果:
$locust --headless --users 10 --spawn-rate 1 -H http://your-server.com
[2022-11-23 16:41:10,947] .../INFO/locust.main: No run time limit set, use CTRL+C to interrupt.
[2022-11-23 16:41:10,947] .../INFO/locust.main: Starting Locust 2.13.0
[2022-11-23 16: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
[2022-11-23 16:44:42,484] .../INFO/locust.runners: All users spawned: {"HelloWorldUser": 10} (10 total users)
参考无Web UI运行章节获取更多详情。
更多选项
要在多个Python进程或机器上运行Locust,可以使用–master命令行参数启动一个Locust主进程,然后使用–worker命令行参数来启动任意数量的Locust工作进程。有关详细信息,请参阅分布式负载生成。
要查看所有可用选项,请输入:locust --help
或查看Configuration章节。
下一步
现在,让我们更深入地了解一下locustfiles以及它们可以做什么:编写locustfile。