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

时间:2011-02-16 16:08:38

标签: jmeter load-testing performance-testing stress-testing

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

谢谢!

6 个答案:

答案 0 :(得分:61)

您可以使用ConstantThroughputTimer

从下面的JMeter帮助文件中引用:

  

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

例如,我用它每秒生成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 :(得分:33)

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

通常,当性能指标特定x每秒时,它是在一段时间内测量的。你的API甚至可能有一个缓冲区 - 所以你可以在技术上每秒发送6个,但是每秒处理5个,缓冲区为20,这意味着20秒的流量就可以了,因为你已经发送了120个,需要120/5 = 24秒来处理。但是除此之外还会溢出缓冲区。所以要恰好每秒发送6次测试是不够的。

在线程组中,您正确设置线程数(用户数)为6.然后将其永久循环运行(勾选或将其置于while循环中)并添加一个监听器,如聚合报告和结果树。您可以使用检查正确内容的结果进行发送并做出响应(假设您验证了响应),在汇总报告中,您可以看到每小时每次活动发生了多少(显然会在几秒钟内乘以3600,但是由于这种不准确性,最好长时间运行它。)

现在可以运行初始负载测试,并且作为更准确的测试,您可以让它运行更长时间(浸泡测试)以查看是否存在任何其他问题 - 缓冲区溢出,内存泄漏或其他意外事件。 / p>

答案 2 :(得分:18)

答案 3 :(得分:1)

我有类似的问题,这里有两个我找到的解决方案:

解决方案1:
您可以使用步进线程组(允许在设定的时间段内设置线程数增加阶段),其中包含常量吞吐量计时器。 吞吐量计时器允许您设置线程每分钟可以发送的样本数(例如,如果将其设置为1,则线程每分钟只发送一个请求)。此外,您可以将吞吐量计时器应用于线程组中的所有线程,或者为每个线程使用自己的设置定时器。 在此处阅读有关吞吐量计时器的更多信息:https://www.blazemeter.com/blog/how-use-jmeters-throughput-constant-timer

解决方案2:
使用&#34; SetUp线程组&#34;。您可以计算线程数和rump up time以获得所需的每秒线程数。

答案 4 :(得分:0)

您可以使用Schedule Feedback Function,并且还需要并发线程组

答案 5 :(得分:0)

同样可以通过从 UI 配置上面建议的“ConstantThroughputTimer”来完成,也可以通过右键单击“线程组”进行导航,然后单击“计时器”,然后选择“恒定吞吐量计时器”来添加“恒定吞吐量计时器”。< /p>