k6 中的睡眠功能是暂停所有虚拟用户的执行还是一次只暂停一个用户?

Does the sleep function in k6 pause execution of all virtual users or just one user at a time?

我刚开始使用 https://k6.io 进行负载测试,想知道 sleep 函数的行为。

现在我已经构建了一个多阶段的负载测试。在我的默认函数中,我有许多请求(get 和 post)被执行。

我注意到,如果我只是按顺序执行这些命令几分钟,我在弹性 beanstalk 上 运行 的应用程序开始变慢并最终抛出 500 个错误。

但是,如果我像这样在每个请求之后添加一个 sleep 语句:


const getMe = http.get(`${appEndpoint}/me`, params)
check(getMe, {
  'me: status was 200': r => r.status == 200,
  'me: response time OK (under 500ms)': r => r.timings.duration < maxResponseTimeMs,
  });

sleep(Math.floor(Math.random() * 4) + 1)

// next request would follow below

然后我可以毫无问题地将虚拟用户数轻松增加 10 倍。

所以我的问题是:

sleep 是否导致 k6 暂停所有虚拟用户的所有请求达该时间量,或者它一次只暂停来自一个虚拟用户的请求。

据我了解,虚拟用户本质上只是运行负载测试的 default 函数的并行执行,所以整个函数是针对所有用户暂停还是针对每个用户执行此操作.

在文档中找不到任何关于此的信息,因此将不胜感激!

谢谢

Does sleep cause k6 to pause ALL requests for all virtual users for that amount of time OR does it just pause the requests from one virtual user at a time.

您的直觉是正确的:由于 VU 并行执行 default 函数且彼此隔离,因此 sleep() 调用将仅暂停该 VU 的执行。

由于您在迭代之间随机休眠 1-4 秒,您的服务器可能能够处理随机流量,而发送请求的速度与您的测试机器可以分派的速度一样快,这将导致速度减慢和500 个错误。在测试过程中,您会发现适合您系统的平衡是什么,什么最适合您。

正是出于这个原因,sleep()-ing 技术很有用,因此您可以控制发送的请求数量。另请查看 --rps option.