我需要测试我们的系统是否每秒可以执行N个请求 . 从技术上讲,它创建了三个线程组,首先定义了线程数1,并且加速时间为0.第二个线程组是相同的,第三个线程组定义了线程数6和加速时间0.但是没有't really guarantee it'将每秒运行它们如何模拟它?我如何看待结果 - 如果它能够执行或不执行?
谢谢!
与任何网络测试一样,总会出现问题,尤其是延迟问题 - 即使您可以每秒发送6个,它们只是如何发送数据包,也可能不会在第二个时间内发送,加上处理时间 .
通常,当性能指标特定x每秒时,它是在一段时间内测量的 . 你的API甚至可能有一个缓冲区 - 所以你可以在技术上每秒发送6个,但是每秒处理5个,缓冲区为20,这意味着20秒的流量就可以了,因为你已经发送了120个,需要120/5 = 24秒来处理 . 但是除此之外还会溢出缓冲区 . 所以要恰好发送6秒钟来测试是不够的 .
在线程组中,您可以将线程数(用户数)设置为6.然后将其永久循环运行(勾选它或将其放入while循环中)并添加一个类似聚合报告和结果树的监听器 . 您可以使用检查正确内容的结果进行发送并做出响应(假设您验证了响应),在汇总报告中,您可以看到每小时每次活动发生了多少(显然可以乘以3600秒,但是由于这种不准确性,最好在很长一段时间内运行它 .
现在可以运行初始负载测试,并且作为更准确的测试,您可以让它运行更长时间(浸泡测试)以查看是否存在任何其他问题 - 缓冲区溢出,内存泄漏或其他意外事件 .
你可以使用 ConstantThroughputTimer .
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%)
但我在我的网络中运行此测试 .
使用Throughput Shaping Timer
我有类似的问题,这里有两个我发现的解决方案:
Solution 1:您可以使用步进线程组(允许在设定的时间段内设置线程数增加阶段),其中包含常量吞吐量计时器 . 吞吐量计时器允许您设置线程每分钟可以发送的样本数(例如,如果将其设置为1,则线程每分钟只发送一个请求) . 此外,您可以将吞吐量计时器应用于线程组中的所有线程,或者为每个线程使用自己的设置定时器 . 在此处阅读有关吞吐量计时器的更多信息:https://www.blazemeter.com/blog/how-use-jmeters-throughput-constant-timer
Solution 2:使用"SetUp Thread Group" . 您可以计算线程数和rump up time以获得所需的每秒线程数 .
您可以使用Schedule Feedback Function并且还需要并发线程组
5 回答
与任何网络测试一样,总会出现问题,尤其是延迟问题 - 即使您可以每秒发送6个,它们只是如何发送数据包,也可能不会在第二个时间内发送,加上处理时间 .
通常,当性能指标特定x每秒时,它是在一段时间内测量的 . 你的API甚至可能有一个缓冲区 - 所以你可以在技术上每秒发送6个,但是每秒处理5个,缓冲区为20,这意味着20秒的流量就可以了,因为你已经发送了120个,需要120/5 = 24秒来处理 . 但是除此之外还会溢出缓冲区 . 所以要恰好发送6秒钟来测试是不够的 .
在线程组中,您可以将线程数(用户数)设置为6.然后将其永久循环运行(勾选它或将其放入while循环中)并添加一个类似聚合报告和结果树的监听器 . 您可以使用检查正确内容的结果进行发送并做出响应(假设您验证了响应),在汇总报告中,您可以看到每小时每次活动发生了多少(显然可以乘以3600秒,但是由于这种不准确性,最好在很长一段时间内运行它 .
现在可以运行初始负载测试,并且作为更准确的测试,您可以让它运行更长时间(浸泡测试)以查看是否存在任何其他问题 - 缓冲区溢出,内存泄漏或其他意外事件 .
你可以使用
ConstantThroughputTimer
.引用JMeter帮助文件如下:
例如,我用它每秒生成40个请求:
这就是总结:
但我在我的网络中运行此测试 .
使用Throughput Shaping Timer
我有类似的问题,这里有两个我发现的解决方案:
Solution 1:
您可以使用步进线程组(允许在设定的时间段内设置线程数增加阶段),其中包含常量吞吐量计时器 . 吞吐量计时器允许您设置线程每分钟可以发送的样本数(例如,如果将其设置为1,则线程每分钟只发送一个请求) . 此外,您可以将吞吐量计时器应用于线程组中的所有线程,或者为每个线程使用自己的设置定时器 . 在此处阅读有关吞吐量计时器的更多信息:https://www.blazemeter.com/blog/how-use-jmeters-throughput-constant-timer
Solution 2:
使用"SetUp Thread Group" . 您可以计算线程数和rump up time以获得所需的每秒线程数 .
您可以使用Schedule Feedback Function并且还需要并发线程组