虽然 Locust 通过协程可以实现单机大量并发,但是对多核 CPU 的支持并不好,可以通过在一台机器上启动多个 Locust 实例实现对多核 CPU 的利用(单机分布式)。
Once a single machine isn’t enough to simulate the number of users that you need, Locust supports running load tests distributed across multiple machines.
如果单台计算机不足以模拟所需的用户数量,Locust 也支持在多台计算机上进行分布式负载测试。
To do this, you start one instance of Locust in master mode using the --master
flag. This is the instance that will be running Locust’s web interface where you start the test and see live statistics. The master node doesn’t simulate any users itself. Instead you have to start one or -most likely-multiple worker Locust nodes using the --worker
flag, together with the --master-host
(to specify the IP/hostname of the master node).
为此,你可以使用 --master
来标识当前启动的 Locust 实例是一个主节点。此实例会收集测试过程的数据并查看实时统计的结果。设置虚拟用户数量也是在主节点上进行设置,因为只有主节点能够看到 web UI 界面。
主节点本身不会模拟任何用户,相反,必须使用 --worker
标识工作节点。并在工作节点通过 --master-host
指定主节点的 IP/host。工作节点可以只有一个或多个。
A common set up is to run a single master on one machine, and then run one worker instance per processor core on the worker machines.
常见的设置是在一台计算机上运行一个主节点,然后在工作计算机上“每个处理器内核运行一个工作节点”。
Note
Both the master and each worker machine, must have a copy of the locust test scripts when running Locust distributed.
注意:分布式运行 Locust 时,主节点计算机和每个工作节点计算机都必须具有 Locust 测试脚本的副本。
Note
It’s recommended that you start a number of simulated users that are greater than number of user classes * number of workers
when running Locust distributed.
Otherwise - due to the current implementation - you might end up with a distribution of the User classes that doesn’t correspond to the User classes’ weight
attribute. And if the hatch rate is lower than the number of worker nodes, the hatching would occur in “bursts” where all worker node would hatch a single user and then sleep for multiple seconds, hatch another user, sleep and repeat.
注意:建议你使用 Locust 分布式运行时启动的虚拟用户数量大于
User 类数量 * 工作节点数量
。否则,由于当前的实现方式,你最终可能会获得与用户类的weight
属性不对应的 User 类分布。而且,如果执行率低于工作节点的数量,所有工作节点将对生成一个虚拟用户,然后休眠数秒钟,再生成另一个虚拟用户,然后重复休眠(没看懂,反正虚拟用户数要大于User 类数量 * 工作节点数量
)。
Example
To start locust in master mode:
启动一个 Locust 工作节点:
locust -f my_locustfile.py --master
And then on each worker (replace 192.168.0.14
with IP of the master machine, or leave out the parameter alltogether if your workers are on the same machine as the master):
然后在每个工作节点上(用你的主节点计算机IP替换192.168.0.14
):
locust -f my_locustfile.py --worker --master-host=192.168.0.14
如果你的工作节点与主节点在同一台计算机上,则不设置参数。
Options 选项
--master
Sets locust in master mode. The web interface will run on this node.
将当前 Locust 实例设置为主节点。Web 界面将在此节点上运行。
--worker
Sets locust in worker mode.
设置 Locust 工作节点。
--master-host=X.X.X.X
Optionally used together with --worker
to set the hostname/IP of the master node (defaults to 127.0.0.1)
(可选)指定工作节点的同时,通过此命令指定主节点的 host/IP,默认为 127.0.0.1
。
--master-port=5557
Optionally used together with --worker
to set the port number of the master node (defaults to 5557).
(可选)指定工作节点的同时,通过此命令指定主节点的端口,默认为 5557
。
--master-bind-host=X.X.X.X
Optionally used together with --master
. Determines what network interface that the master node will bind to. Defaults to * (all available interfaces).
(可选)与 --master
一起使用,确定主节点将绑定到的网络 IP。默认为 *(所有可用 IP)。
--master-bind-port=5557
Optionally used together with --master
. Determines what network ports that the master node will listen to. Defaults to 5557.
(可选)与 --master
一起使用,确定主节点将监听的端口。默认为 5557。
--expect-workers=X
Used when starting the master node with --headless
. The master node will then wait until X worker nodes has connected before the test is started.
使用 --headless
(无 Web UI 模式)启动主节点时使用。然后,主节点将等待,直到 X 个工作节点已连接,然后才能开始测试。
使用 Docker 进行分布式执行
没有 web UI 的情况下运行 Locust
查看 Running Locust distributed without the web UI
在逐步加载模式下运行的 Locust
查看 Running Locust in Step Load Mode
提高 Locust 性能
如果你打算运行大规模负载测试,则可能有兴趣使用 Locust 附加的备用HTTP客户端。你可以查看更多内容: Increase Locust’s performance with a faster HTTP client