【问题标题】:Getting Locust to send a predefined distribution of requests per second让 Locust 每秒发送预定义的请求分布
【发布时间】:2021-12-16 19:08:24
【问题描述】:

我之前询问过this question,关于使用 Locust 作为向目标服务器传递静态、可重复请求负载的方式(每秒 n 个请求,持续五分钟,其中 n 是每秒预先确定的),并确定这不是很容易实现的。

因此,我退后一步,将问题重新表述为您可能可以使用自定义负载形状来解决的问题,但我不确定如何——因此提出了这个问题。

与上一个问题一样,我们提取 Apache 日志的时间为 5 分钟,其中每秒向 Apache 服务器发出 1 到 36 个 GET 请求。从这些日志中,我可以得到特定每秒请求率出现多少次的分布;例如在任何给定秒内处理 36 个请求的概率为 1/4000,在任何给定秒内处理 18 个请求的概率为 1/50,依此类推。

我可以将请求率的分布建模为一个简单的 Python 列表:1 到 36 之间的数字出现在其中的次数与在 Apache 中捕获的 5 分钟时间段内每秒发出 1 到 36 个请求的次数相同日志,然后在自定义负载形状的tick() 方法中随机从中获取一个数字,以获取一个通知(user count, spawn rate) 计算的数字。

此外,通过使用预先确定的随机种子,我可以使测试运行在可接受的变化范围内可重复运行,从而有助于测试我的 API 服务器配置更改,因为每次都应检索相同的随机列表元素。

问题是我还不能“在 Locust 中思考”,从用户数量和生成率而不是服务器接收请求的速率来思考。

问题变成了这样:

您如何实现自定义负载形状的tick() 方法,使(user count, spawn rate) 元组导致每秒发送的请求的大致分布,可能与其他配置选项和插件的帮助?

【问题讨论】:

    标签: load-testing locust


    【解决方案1】:

    您需要创建一个具有您希望它运行的任务的 Locust 用户(例如,进行 http 调用)。您可以定义time between tasks 来控制每秒的请求数。如果您的任务是进行一次 http 调用并定义 wait_time = constant(1),您每秒大约可以获得 1 个请求。 Locust 的spawn_rate 是每秒单位。由于您已经有了想要重现的数据并且它以 1 秒为间隔,因此您可以使用 tick() 方法创建一个 LoadTestShape 类,有点像这样:

    class MyShape(LoadTestShape):
        repro_data = […]
        last_user_count = 0
        def tick(self):
            self.last_user_count = requests_per_second
            if len(self.repro_data) > 0:
                requests_per_second = self.repro_data.pop(0)
                requests_per_second_diff = abs(last_user_count - requests_per_second)
                return (requests_per_second, requests_per_second_diff)
            return None
    

    如果您的第一个数据点是 10 个请求,则您需要 requests_per_second=10requests_per_second_diff=10 以使 Locust 在一秒钟内启动所有 10 个用户。如果下一秒是 25,您将拥有 requests_per_second=25requests_per_second_diff=15。在负载形状中,spawn_rate 也可用于减少用户数量。所以如果 next 是 16,requests_per_second=16requests_per_second_diff=9

    【讨论】:

    • 谢谢。昨天我终于找到了同样的方法,并针对记录每秒收到多少请求的本地python -mhttp.server 实例进行了测试。多次运行的结果有些不同,但总体趋势图足够接近,如果生产中有足够的测试重复,这可能就足够了。
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多