Java Gatling(和JMeter)努力维护每秒请求数(RPS)?

Java Gatling(和JMeter)努力维护每秒请求数(RPS)?,java,api,jmeter,performance-testing,gatling,Java,Api,Jmeter,Performance Testing,Gatling,我正在对API进行负载测试。我们有一个问题-我们的响应时间太长,有时接近一分钟。我们希望在一秒以下的范围内。但这不是重点 当我使用负载测试工具(如Gatling)时,发送的RPS似乎停止了。正如您在所附的图片中看到的,最初的15秒是20转/秒,突然之间几乎没有转/秒。如何保持恒定的RPS?也许这与响应时间差有关,但是如果我不关心响应时间呢?我只想要RPS常数 我最初使用JMeter进行的测试也显示了类似的行为 您使用的注射策略是什么?情况如何?是否每个用户都在循环中发出一个请求、请求链或以上任何

我正在对API进行负载测试。我们有一个问题-我们的响应时间太长,有时接近一分钟。我们希望在一秒以下的范围内。但这不是重点

当我使用负载测试工具(如Gatling)时,发送的RPS似乎停止了。正如您在所附的图片中看到的,最初的15秒是20转/秒,突然之间几乎没有转/秒。如何保持恒定的RPS?也许这与响应时间差有关,但是如果我不关心响应时间呢?我只想要RPS常数

我最初使用JMeter进行的测试也显示了类似的行为


您使用的注射策略是什么?情况如何?是否每个用户都在循环中发出一个请求、请求链或以上任何请求

假设您想要测试单个端点,获得每秒恒定请求(而不是您已经知道的恒定响应)的最佳方法是使用执行单个请求的场景和每秒注入恒定数量用户的策略:

setUp(
  scn.inject(constantUsersPerSec(25) during(15 minute))
)
如果您的用户执行的请求超过1个,则可以选择限制请求,但您需要记住,限制请求只会降低而不会提高,因此您需要确保活动用户每秒发出足够的请求,以达到该限制fe:

setUp(scn.inject(
  constantUsersPerSec(10) during(15 minutes)
).throttle(
  jumpToRps(25), holdFor(15 minutes)
))

所以这里如果是fe。单个用户发出5个请求,您甚至可以达到50个请求/秒,但将限制为25个。但您必须记住,新用户将每秒添加一次,因此,如果完成一个用户需要更多时间,则活动用户的数量将增加。另外,如果响应时间很长,那么活动用户可能无法生成足够的req/s,因为他们的大部分时间都在等待响应。

您使用的是什么注入策略?情况如何?是否每个用户都在循环中发出一个请求、请求链或以上任何请求

假设您想要测试单个端点,获得每秒恒定请求(而不是您已经知道的恒定响应)的最佳方法是使用执行单个请求的场景和每秒注入恒定数量用户的策略:

setUp(
  scn.inject(constantUsersPerSec(25) during(15 minute))
)
如果您的用户执行的请求超过1个,则可以选择限制请求,但您需要记住,限制请求只会降低而不会提高,因此您需要确保活动用户每秒发出足够的请求,以达到该限制fe:

setUp(scn.inject(
  constantUsersPerSec(10) during(15 minutes)
).throttle(
  jumpToRps(25), holdFor(15 minutes)
))

所以这里如果是fe。单个用户发出5个请求,您甚至可以达到50个请求/秒,但将限制为25个。但您必须记住,新用户将每秒添加一次,因此,如果完成一个用户需要更多时间,则活动用户的数量将增加。另外,如果响应时间很长,那么活动用户可能无法生成足够的req/s,因为他们的大部分时间都在等待响应。

在JMeter中,您可以通过在测试计划级别使用来实现这一点

恒定吞吐量计时器允许您保持服务器的吞吐量(请求/秒)。恒定吞吐量计时器只能暂停JMeter线程,以降低它们的速度以达到目标吞吐量。此外,它只在一分钟内工作,因此您需要正确计算爬升周期,并让您的测试运行足够长的时间

让我们看一下关于这一点的简短思考:

为了达到目标吞吐量,测试计划中需要有足够数量的线程

要计算此测试所需的线程数,可以使用以下公式:

RPS*最大响应时间(秒)

在您的情况下,如果您想要20个RPM,并且最大响应时间是60秒,那么您的测试计划中至少需要1200个(
20*60=1200
)线程

由于恒定吞吐量计时器以分钟为单位工作,要实现
20 rpm
,您必须将“目标吞吐量”值配置为
1200/min
“根据“值作为”
所有活动线程计算吞吐量”

恒定吞吐量计时器配置:

现在,如果您的测试计划中有多个请求(即
4个请求
),那么
1200个请求/分钟
将分配给
4个采样器
。这意味着您将获得每个采样器的
5RPS

现在,对于配置,正如您所提到的,根据“
所有活动线程”
“的恒定吞吐量计时器中的“值计算吞吐量,因此所有
1200
线程都需要在服务器上启动,以实现
20 RPS
。使用Ramp-Up Periodconfig来控制这些线程的启动

提升期是所有线程到达测试的应用程序服务器的时间。因此,如果使用
60秒
,则需要60秒才能启动所有
1200个线程
。1200个线程将在
60秒内激活

您还需要相应地设置测试持续时间。比如说,你想保持
20转
5分钟
。在这种情况下,您必须将测试持续时间设置为
7分钟
(额外2分钟用于:1200个线程的启动时间为1分钟,这是爬升时间,1200个线程的爬升时间为最后1分钟)。如果您正在使用,请不要忘记检查循环计数,直到
永远

上述场景的线程组配置:

您还可以使用另一个方便的JMeter插件,如果您对默认配置感到困惑,可以使用它。您可以使用下载JMeter插件

以下是上述场景的最终线程组配置:

现在,在测试完成后,您可以使用and以及检查所有1200个线程都处于活动状态的
5分钟
结果

不要使用JMeter GUI进行负载测试,请使用非GUI模式。此外,如果te中有断言,请删除断言