Image

我們在之前 JMeter 的筆記時,介紹過直接對服務爆打一波的作法:簡單來說就是打好幾輪看看服務撐不撐得住,然後紀錄能吃的最大數量,可以說是非常暴力的做法。

但如果我們想要模擬某個固定數值的請求量(例如每分鐘 100 次請求)、又或是需要用固定速率打出去(例如每 5 秒得敲一下),就不能像上次一樣粗暴地全力出擊了。

這時候,我們就可以用 JMeter 提供的 Constant Throughput Timer(固定吞吐量計時器)來限制呼叫頻率,馬上來筆記一篇。


以下範例會使用到 JMeter 的 HTTP Request 等功能,還不太瞭解的朋友推薦先閱讀上一篇筆記:使用 JMeter 來對 API 壓力測試吧

先確認一下環境:我們有一組腳本,內容只是簡單地戳一下 API

Image

現在我們希望可以模擬線上使用者在尖峰時段的使用頻率,並確認我們服務挺得過去,所以需要把這組腳本調整成:「每分鐘戳 20 次,持續五分鐘」

補充:有時候我們收到的需求會是「持續五分鐘,然後總量為 100」這種,意思是差不多的,反正先確認好 「每分鐘的數量 x 持續幾分鐘 = 總量」 這幾個關鍵數字再說嚕。

首先讓我們加入一組 Constant Throughput Timer: Image

並且找到 Constant Throughput Timer 裡面的 Target Throughput(每分鐘呼叫次數),我們這次的需求是每分鐘要戳他個 20 次,這邊就直接放 20.0: Image

接著回到 Thread Group,因為我們這次的場景是用時間來計算的,所以需要把底下的 Specify Thread Lifetime 打開,並根據要執行的時間來填上秒數

因為我們的需求是跑 5 分鐘,所以先丟個 300 秒: Image

而且我們這次是用執行時間計算數量的,不希望 Loop Count 影響到我們,直接甩個 Infinite 給他(對,我們就是模擬有個使用者坐在那邊無聊一直按按鈕,而且他節奏感還很好)

執行之後就可以確認總量跟每分鐘的吞吐量有沒有符合我們的設置囉: Image

很好!現在我們已經會使用 Constant Throughput Timer 來控制壓力測試時的吞吐量了。

有興趣的朋友可以回去調整各個參數觀察看看,也可以改個 Thread Group 的 Thread 數量看看結果差異,例如當我把上面範例的 Thread 改成 2:

Image

可以看見數量跟吞吐量都有影響(算總數寫報告的時候記得別算錯了 xD)


最後整理一下 Constant Throughput Timer 的適用場景,有以下狀況的時候就可以考慮使用:

  • 模擬某個固定數值的請求量(例如每分鐘X次)
  • 需要穩定地以固定速率發送請求(不能一開頭就重拳出擊)
  • 老闆說:「我們這個測試不能更貼近真實使用者一點嗎?」

各位朋友可以再動手玩玩看。我們下次見~

參考資料

還有最實際的: Image