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

J99*_*J99 7 javascript load-testing k6

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

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

我注意到,如果我只是按顺序执行这些命令几分钟,我在 Elastic 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
Run Code Online (Sandbox Code Playgroud)

然后我可以轻松地将虚拟用户数量增加 10 倍,不会出现任何问题。

所以我的问题是这样的:

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

据我了解,虚拟用户本质上只是default运行负载测试的函数的并行执行,因此整个函数是否会为所有用户暂停,或者是否针对每个用户执行此操作。

在文档中找不到有关此内容的任何信息,因此我们将不胜感激!

谢谢

imi*_*ric 5

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

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

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

正是由于这个原因,这种sleep()-ing 技术非常有用,因此您可以控制发送的请求量。还要看看--rps选项