在 Locust 任务中使用 Gevent 呈指数增长

Using Gevent inside locust task increases exponentially

我有一个 Web 服务器,我想对其 REST API 进行负载测试。我用的是locust==2.5.1, python==3.8.2.

蝗虫配置:

from locust import HttpUser, task, between, constant_throughput
import configparser
from gevent.pool import Group


file_path = "./sample/sample.wav"
num_of_parallel_requests = 3

class FileTranscribeUser(HttpUser):
    @task(1)
    def file_transcribe_request(self):
        group = Group()
        
        for i in range(0, num_of_parallel_requests):
            group.spawn(lambda:self.client.post("/parse", 
                        files = {'audio': open(file_path, 'rb')}))

预期结果: 每秒 Rquests 到 2 始终

实际结果: 请求从 0 猛增到 66,并且越来越多地使我的本地 运行 服务器崩溃(locoust 也在本地 运行)。

我参考了这个 article 来实现:

块引用

如果您只想每秒获得 2 个请求,我认为这篇文章根本不是您想要的。

您要做的是编写您的 task,这样它只会适当地调用您的 self.client.post()。然后在您的 Locustfile 中,您需要设置一个 wait_time(参见 docs here),用于限制用户开始和 运行 完成您的任务之间的时间。你可能想要 wait_time = constant_pacing(1)。然后当你 运行 Locust 时,给它 2 个用户和 2 的生成率。这将立即启动 2 个用户,只有 2 个用户会执行你的 post 调用,等一秒钟,然后被替换将再次拨打电话的 2 个用户,每秒给您恒定的 2 个请求。