使用 Locust 的恒定并行请求数

Eld*_*ldy 5 python load-testing locust

我想用 Locust 进行一些负载测试,以了解我的系统如何响应并行请求。

假设我的系统同时收到 10 个请求。我的第一个反应是测量这 10 个请求中每一个的响应时间。我做了一个简单locustfile.py的衡量:

from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):

    def on_start(self):
        pass

    def on_stop(self):
        pass

    @task(1)
    def content_query(self):
        self.client.get('/content')

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 1000
    max_wait = 1000

Run Code Online (Sandbox Code Playgroud)

我使用了这个文件并生成了 10 只蝗虫。我能够得到我想要的测量结果。

但后来我意识到我想知道的是我的系统对所有这 10 个请求的回复速度有多快。如果每个请求需要 20 毫秒才能得到回复,我不知道:

  • 整个过程耗时 20 毫秒,因为每个请求都是并行处理的
  • 整个过程耗时 200 毫秒,因为每个请求都被依次处理

为了衡量这一点,我有以下想法:我希望我的系统在 1 小时内始终处于 10 个请求的负载上,并测量在此期间处理了多少请求。

换句话说,只要 10 个请求中的一个成功,就应该执行另一个请求来代替它。

我怎么能用 Locust 做到这一点?

我有使用请求成功处理程序的想法,如 Locust 文档中所述:

from locust import HttpLocust, TaskSet, task, events

def my_success_handler(request_type, name, response_time, response_lenght, **kw):
    print("Success")

events.request_success += my_success_handler
Run Code Online (Sandbox Code Playgroud)

这将让我知道一个请求何时成功,但是然后呢?我不确定是否可以通知特定蝗虫其请求成功。