使用 JMeter 进行测试: 如何每秒运行 N 个请求

我需要测试我们的系统是否可以每秒执行 N 个请求。 从技术上讲,这是对一个 API 的2个请求,对另一个 API 的2个请求,对第三个 API 的6个请求。 但是重要的是它们应该同时发生——每秒10个请求。 因此,在 JMeter 中,我创建了三个线程组,首先定义了线程数1,然后定义了加速时间0。 第二个线程组是相同的,第三个线程组定义了线程数6和爬行时间0。 但是这并不能保证它们能够运行 每秒 我该怎么模仿呢?我怎么才能看到结果,它能不能执行呢?

谢谢!

118381 次浏览

和任何网络测试一样,总会有问题,尤其是延迟——即使你的 可以每秒发送6个,它们也会按顺序发送(这就是数据包发送的方式) ,并且可能不会在那一秒内全部命中,加上处理时间。

通常,当性能指标特定于每秒 x 时,它是在一段时间内度量的。你的 API 甚至可能有一个缓冲区——所以技术上你可以每秒发送6个,但是每秒处理5个,缓冲区是20,这意味着它可以处理20秒的流量,就像你发送120个一样,这需要120/5 = 24秒来处理。但是超过这个数量就会溢出缓冲区。因此,仅仅在一秒钟内发送6进行测试是不够的。

在线程组中,将线程(用户)的数量设置为6是正确的。然后永远运行它循环(勾选它或将其放入 while 循环中) ,并添加一个侦听器,如聚合报告和结果树。你可以使用结果来检查正确的东西被发送和回应(假设你验证了回应) ,在汇总报告中,你可以看到每个活动每小时发生多少次(显然乘以3600秒,但由于这种不准确性,最好运行一段时间)。

现在可以运行初始负载测试,作为更精确的测试,您可以让它运行更长的时间(浸入测试) ,以查看是否存在其他问题——缓冲区溢出、内存泄漏或其他意外事件。

你可以用 ConstantThroughputTimer

引用 JMeter 帮助文件如下:

18.6.4恒定吞吐量计时器 这个计时器引入了可变的暂停,计算的目的是使总吞吐量(以每分钟采样量为单位)尽可能接近给定的数字。当然,如果服务器不能处理它,或者其他计时器或耗时的测试元素阻止它,那么吞吐量就会降低。 注意,虽然定时器被称为恒定吞吐量定时器,但是吞吐量值并不需要是恒定的。它可以根据变量或函数调用来定义,并且可以在测试期间更改该值。

例如,我使用它每秒生成40个请求:

 <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" enabled="true">
<stringProp name="calcMode">all active threads in current thread group</stringProp>
<doubleProp>
<name>throughput</name>
<value>2400.0</value>
<savedValue>0.0</savedValue>
</doubleProp>
</ConstantThroughputTimer>

总结如下:

Created the tree successfully using performance/search-performance.jmx
Starting the test @ Tue Mar 15 16:28:39 CET 2011 (1300202919244)
Waiting for possible shutdown message on port 4445
Generate Summary Results +  3247 in  80,3s =   40,4/s Avg:    18 Min:     0 Max:  1328 Err:   108 (3,33%)
Generate Summary Results +  7199 in 180,0s =   40,0/s Avg:    15 Min:     1 Max:  2071 Err:   378 (5,25%)
Generate Summary Results = 10446 in 260,3s =   40,1/s Avg:    16 Min:     0 Max:  2071 Err:   486 (4,65%)
Generate Summary Results +  7200 in 180,0s =   40,0/s Avg:    14 Min:     0 Max:   152 Err:   399 (5,54%)
Generate Summary Results = 17646 in 440,4s =   40,1/s Avg:    15 Min:     0 Max:  2071 Err:   885 (5,02%)
Generate Summary Results +  7199 in 180,0s =   40,0/s Avg:    14 Min:     0 Max:  1797 Err:   436 (6,06%)
Generate Summary Results = 24845 in 620,4s =   40,0/s Avg:    15 Min:     0 Max:  2071 Err:  1321 (5,32%)

但是我在我的网络里运行这个测试。

我也遇到过类似的问题,我发现了两种解决方案:

解决方案1:
可以使用单步线程组(允许在设定的时间段内设置线程数量增加阶段) ,其中包含常量吞吐量计时器。 吞吐量定时器允许您设置线程每分钟可以发送的示例数量(例如,如果您将其设置为1,则线程每分钟只发送一个请求)。此外,您可以将吞吐量计时器应用于线程组中的所有线程,或者为每个线程使用计时器及其自身的设置。 点击这里阅读更多关于吞吐量计时器的内容: < a href = “ https://www.blazemeter.com/blog/how-use-jmeter-吞吐量-常量计时器”rel = “ nofollow”> https://www.blazemeter.com/blog/how-use-jmeters-Throughput-constant-Timer

解决方案2:
使用“安装线程组”。您可以计算线程数量和运行时间,以获得每秒所需的线程。

您可以使用 时间表反馈功能,并且还需要并发线程组

同样也可以通过配置“ Constant吞吐量计时器”来完成,如上面从 UI 建议的那样,也可以通过右键点击 Thread Group,然后点击 Timer,然后选择“ Constant 吞吐量计时器”来添加“ Constant 吞吐量计时器”。