在壓力測試時,可能需要使用jmeter的梯度加壓。而在使用梯度加壓時,大部分tester會對這一點疑惑:設置的總線程是100,但聚合報告中線程數遠超100個 ,為什么梯度加壓會有這樣的現象?用事實說話,本文用示例去解釋這一點。
環境:
先設置梯度加壓的場景,訪問某網站,具體如下:
從這個梯度加壓設置的參數,我們可以看出設置的總線程數為50個,每2s增加5個,在1s內增加完成;然后線程保持30s;再然后,每2s停掉5個線程。
要正確理解最終請求數,需要明白每一秒鍾線程釋放了多少請求
分析:
在梯度加壓有三個階段:梯度加壓、持續負載、線程釋放。
梯度加壓:
如果該請求的平均響應時間是100ms,那么1s鍾該請求可以迭代10次;
那么在1s內如果啟動了5個線程,這1s內發出的請求數就是5*10=50次
接着運行2s后才開始加載下一波線程,在這2s內,它發出的請求數是2*5*10=100次
在2s之后,線程組又在1s內釋放5個請求,並運行2s,在這2s內,它發出的請求數是2*10*10=200次(此時是10個線程在運行)
以此類推,直到50個線程加載完之前,線程釋放的請求數是這樣的:(2*5*10)+(2*10*10)+(2*15*10)+(2*20*10)+(2*25*10)+....+(2*45*10)=4500次
持續負載:
(注意:為什么最后不是2*50*10呢?因為從50個線程加載完之后,進行的就是30s的持續負載)
這30s內,總的請求數是30*50*10=15000次
線程釋放:
(30s負載結束后,線程開始梯度釋放)
此時即使線程在釋放,剩余的線程依然在發起請求,請求數:(2*45*10)+(2*40*10)+(2*35*10)+(2*30*10)+(2*25*10)+....+(2*5*10)=4500次
所以,總的請求數=4500+15000+4500=24000次
(實際測試中情況並非如此,因為隨着負載增加,響應時間增大,每秒迭代次數減小,最終請求數也會減小。本文只是介紹思路。)
本文借鑒別人的文章。