Locust 似乎比我的实际请求触发了 request_success 事件挂钩 60 倍

Locust seeming to fire request_success event hook 60x than my actual requests

我正在使用 Locust 进行一些负载测试。对于它的价值,我还使用 Graphite 和 Grafana 来分析结果,但我可以在不加载或在我的代码中使用任何一个的情况下产生这个问题。

最简单的情况是,可以使用以下非常简单的 locust 文件重现该问题:

from locust import HttpLocust, TaskSet, task, between
import locust.events


class Tasks(TaskSet):
    @task
    def make_request(self):
        self.client.get('/')
        print('doing thing')


class Locust(HttpLocust):
    wait_time = between(1, 3)
    task_set = Tasks

    def __init__(self):
        super(Locust, self).__init__()
        locust.events.request_success += self.hook_request_success

    def hook_request_success(self, request_type, name,
                             response_time, response_length):
        # This is where I would make a call to send the request's metadata to Graphite
        print("sending thing")

这样调用:

locust -H <host> -t 10s -c 1000 -r 10 --no-web -f test.py

如您所见,规格是基本的。我有一个单任务计划,我想执行一个请求,将每个请求的结果发送到 Graphite。但是,在我所有运行的标准输出中,我得到的 "sending thing" 实例比 "doing thing" 多近六十 (60) 倍,而我认为它们完全是一对一的!我已经确认正在使用相同的参数调用该函数并表示完全相同的请求,只是为蝗虫发出的每个 "actual" 请求多次调用。我根本不想要这个,我只想发送一次请求。

这是为什么?我做错了什么吗?

每次 spawn/instantiate 蝗虫时,您都在添加事件侦听器。

使 hook_request_success 成为全局函数并从那里添加它,将其更改为如下所示:

locust.events.request_success += hook_request_success

这样只会添加一次,这就是你想要的。