关于jmeter的httpclient.reset_state_on_thread_group_iteration设置项的理解
周末在学习jmeter性能测试的时候,发现jmeter的响应时间很长,而且测试过程中的性能测试曲线走势波动很大,于是经过分析之后得出结果:httpclient.reset_state_on_thread_group_iteration为ture导致的
该选项是jmeter5.0版本引入的一个新功能,这个选项是什么意思呢,其实通过字面意思来理解,就可以得出结论,这个选项就是重置http线程组迭代功能的。
这个选项默认设置为true,也就是说,默认开启后,同一个线程组迭代时,它会重置tcp连接状态,也就【握手-传输数据-挥手-握手-传输数据-挥手 】这么一个过程。
接下来,我们分别设置为ture、false选项,然后通过抓包来看下到底有什么不同之处。
首先我们设置为该选项为true,线程组:1 迭代次数:2。然后重启jmeter,开启wireshark抓包
抓包截图如下:
从抓包结果来看:
首先是三次握手,然后传输数据、接着挥手,然后又开始握手,传输数据,然后挥手,结束这个过程。
这个结论和我们上文中提到的是一致。
接着,我们将该选项设置为false,然后重启jmeter,再抓一次,抓包结果如下:
从抓包结果来看:
首先还是三次握手、接着传输数据,由于2次迭代动作其实都是登录,所以会看到有2个登录的接口,最后是挥手,但是这次没有重复的挥手,握手的过程,而是只进行了一次握手和挥手动作,所以可以得出结论:
设置为false时,不会重复的挥手和握手,这个对于性能的提升是有显著影响的。
但是由于这个选项默认设置为true,所以一般我们建议设置为false,此选项可以通过jmeter.properties来进行修改:
# Reset HTTP State when starting a new Thread Group iteration which means:
# true means next iteration is associated to a new user
# false means next iteration is associated to same user
# true involves:
# - Closing opened connection
# - resetting SSL State
#httpclient.reset_state_on_thread_group_iteration=true
翻译内容如下:
启动新线程组迭代时重置HTTP状态,这意味着:
true表示下一次迭代与新用户关联
false表示下一次迭代与同一用户关联
“true”包括: