K6场景生成每秒特定请求率

问题描述 投票:0回答:1

我使用 K6 场景编写了以下选项来进行性能测试,希望能够实现每秒不同请求的流量,同时保持虚拟用户 - VU 恒定在 100。


    export let options = {
    scenarios: {
        foo: {
            executor: 'ramping-arrival-rate',
            preAllocatedVUs: 100, //start & end at 100 VUs

            startRate: baseRPS, timeUnit: '1s',
            stages: [
                { target: baseRPS * 10, duration: '0s' },   // jump to 10 iterations/s immediately
                { target: baseRPS * 10, duration: '30s' },  // stay at 10 iterations/s for the next 30 seconds
                { target: baseRPS * 20, duration: '0s' },   // jump to 20 iterations/s immediately
                { target: baseRPS * 20, duration: '30s' },  // stay at 20 iterations/s for the next 30 seconds
                { target: baseRPS * 30, duration: '0s' },   // jump to 30 iterations/s immediately
                { target: baseRPS * 30, duration: '30s' },  // stay at 30 iterations/s for the next 30 seconds
            ],
        },
    },
    insecureSkipTLSVerify: true,
    };

执行显示K6相应地经历了每个阶段。我的目标是确定 VU 是否会导致性能下降或每秒请求数下降。

当我看到K6的结果时我很惊讶。因为它平均显示,每秒仅生成大约 7 个请求。

我在选项配置中做错了什么吗?还是 100VU 不足以每秒生成更多请求?

此外,我的 Grafana 仪表板(我流式传输了 K6 测试结果)显示每秒请求率在整个测试期间从未真正发生过剧烈变化。

performance grafana k6
1个回答
0
投票

一个VU在一个时间点只能发送单个请求(如果想要并行请求,则需要多个VU)。

端点成功请求的最快响应时间为 2.69 秒,平均值为 11.87 秒,中位数为 13.07 秒。最慢响应16.5秒。

从 k6 报告和 Grafana 仪表板中,您可以轻松地看到您的 VU 已达到最大(测试输出中还应该有一条日志消息)。

假设您有 100 个 VU,并且每个 VU 可以每约 2.7 秒发送一个新请求,则请求率为每 2.7 秒 (100/2.7s) 100 个请求,或标准化为 1 秒 = 37 rps。但你的平均值不是2.7秒,而是11.87秒;所以速率为 100/11.87s,即 8.42 rps。这非常接近为您的 HTTP 请求报告的 7.011 rps(不要将

http_reqs
速率与
iterations
速率混淆)。

所以,是的,您需要更多的 VU 来生成您想要的请求率;但!请注意,更多的 VU 意味着您的服务负载更大,并且请求率实际上可能会随着 VU 的增加而下降(或者错误率可能会飙升)! (您的服务可能已经拥堵。有关不同类型测试的更多信息,请访问 https://grafana.com/blog/2024/01/30/api-load-testing/

© www.soinside.com 2019 - 2024. All rights reserved.