我尚不清楚如何在Gatling中控制封闭的工作负载模型。
如果我使用constantConcurrentUsers
,例如:
myScenario.inject(
constantConcurrentUsers(40) during (2 minutes)
)
我以为,这意味着活跃用户的数量将是恒定的。但是,相反,我得到这样的报告:
其中用户数量不是恒定的,并且比我想要的多3-5倍。
不过在控制台输出中,我可以看到something是恒定的(这里有4个场景,每个场景都装有10个恒定的并发用户):
但是总负载远远超出我的预期。
我已经进行了节流实验,结果在那里很明显。在我的理解中,节流阀使并发活动请求的数量最大化(如果请求已发送但尚未响应,则该活动为活动的)。我定义了一些应该处理的请求,Gatling每次完成一个请求都会发送一个新请求。由于响应时间之间没有太大差异,因此报告如下所示:
我想做同样的事情,但是这样我可以控制仿真的时间,而不是发送的请求总数。 constantConcurrentUsers
似乎只是我需要的东西,但它会产生意外的结果。我的油门模拟在大约1分钟内以50的油门执行了大约3000个请求。同时,如果我将50个并发用户设置为1分钟,则报告中将发送7000个以上的请求。在油门情况下,响应时间要低得多。因此,节流模拟发送请求要比并发用户模拟慢得多,但这不是因为请求花费更多时间。
我知道活动用户和发送的请求不同,constantConcurrentUsers
控制用户数,而节流控制请求。但是我所有的方案都只包含一个请求,所以我不了解结果之间的区别。
所以我的问题是:
constantConcurrentUsers
时到底是什么常数?constantConcurrentUsers
时如何计算请求数?我已经阅读了加特林文档的this part,该文档确实很短,并且缺少详细说明。我还阅读了this article,其中包含我在任何加特林报告中从未见过的图表,并且无法回答我的问题。
谢谢您的贡献。
我发现Cheatsheet最准确地描述了每个注射步骤。如何注入恒定数量的用户应使用constantConcurrentUsers
,在备忘单中将其描述为:“保持恒定数量的并发用户”
关于您的其他问题:
- 当我使用constantConcurrentUsers时,什么是常数?
我相信加特林确实保持并发用户数不变。请求数量激增的原因是,一个用户可以在给定的时间范围内发出多个请求。对用户的当前请求完成后,同一用户将触发一个新请求。在您的示例中,您有40个users
,并且number of requests
看起来大约为80,这表明每个用户每秒完成2个请求(平均响应时间约为500毫秒?)
- 当我使用constantConcurrentUsers时,如何计算请求数?
如上所述,您的并发用户只会在您设置的持续时间内继续循环该请求,直到当前请求提供响应后,它才会触发另一个请求。如果您的API很快,那么您每秒的请求数将高于您的用户数。
- 报告中的“活动用户”与控制台输出中的“活动”之间是什么关系?
这实际上是我不太确定的地方:/我在测试中设置了10 constantConcurrentUsers
,控制台显示的结果与您相似,但是随着时间的推移,我的报告显示10-75个活跃用户
但是,加特林文档中的此Reports页面提供了一些启示:
“活动用户”既不是“并发用户”也不是“用户到达率”。这是一种混合指标,适用于开放式和封闭式工作负载模型,代表“活跃于系统在给定的每秒负载下。”
计算为:
((前一秒的存活用户数)+(此秒内启动的用户数)-(在前一秒内终止的用户数)