概述
今天看到一篇文章講解VU、RPS、RT,中間有一個公式如下圖
併發數 = RPS * 響應時間
於是我在本地做了幾次實驗,試圖驗證一下公式的準確性
實驗網站 www.baidu.com
第一次實驗
100執行緒,一次迭代,啟動時間1s,執行緒組和聚合報告如圖所示
從結果可以看出,100併發/s,一次迭代,平均響應時間是68ms
如果根據上面公式來看的話
RPS = 併發數/響應時間 = 100/0.068 ,大約是1470/S
但是我們線上程組中可以看出,預置的RPS是 100/S
差距有點大哦~~~想想為什麼呢?
第二次實驗
100執行緒,持續迭代,1s內啟動執行緒,持續執行10s。執行緒組和聚合報告如圖所示。
從聚合報告可以看出來,平均TPS= 1303。那麼我們可不可以就認定這個TPS=RPS呢?
簡單計算一下就知道了。
圖中可以看出我們的單次響應時間是72ms,那麼1秒內大約能迭代14次。100個執行緒下,一秒內大約能傳送1400個請求。
因此我們的RPS大約是1400/S
這樣就能看出來,一秒內傳送1400次請求,但是1s內只有1300個請求能響應完畢
我們再反向驗證一下併發數
併發數 = RPS*響應時間,1400* 0.072 等於100.8,和執行緒組裡面設定的併發數幾乎相同。
如果我們用Throughput=RPS去反向驗證
併發數 = RPS*響應時間,1303* 0.072 等於93,和執行緒組裡面設定的併發數就有一些差距了。
這兩次實驗得出的結論:在持續迭代下,由於樣本充足,所以公式成立。但是RPS!= TPS
第三次實驗
這次我們直接加上RPS定時器,通過精準的RPS來驗證公式
我們讓200RPS保持1分鐘,檢視聚合報告
首先我們就能看出,在200RPS下,平均TPS只有172!
其次,平均併發數 = 200*0.047 = 9.4 意味著我只需要9個執行緒,就可以在一秒內釋放200RPS的壓力
可以算出每個執行緒每秒的請求數是 200/9.4 =21,也就是一個執行緒一秒內最大迭代21次
反推每個請求的響應時間 大約 是 1000/21 大約是 47ms
前後驗證的結果都相符!
第四次實驗
這一次我們直接線上程組中設定剛剛20RPS下得出的平均併發數值 9,反向推斷出RPS的準確性
計算一下RPS = 9 /0.043 約等於209
因為執行緒組只能設定整數,所以會和實驗三有一些誤差,不影響測試的準確性
結尾語:從幾次實驗結果來看,在樣本充足的情況下,公式是沒有問題的。重點是做測試要時刻保持一顆質疑的心,不盲信任何權威 !