前提
在阿里雲 PTS 上有一篇文章講解 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
因為線程組只能設置整數,所以會和實驗三有一些誤差,不影響測試的准確性
結尾語:從幾次實驗結果來看,在樣本充足的情況下,公式是沒有問題的
來源:https://testerhome.com/articles/20770





