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

圖片可以看到還有另一個選項「Calculate Throughput based on」,這個我們晚點再介紹,先維持在「this thread only」

接著回到 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 裡面的 Calculate Throughput based on

有時候我們只在乎每分鐘要打多少筆,不是很在乎每個 Threads 實際分配的量(或是不想算數學),這時候就可以調整 Constant Throughput Timer 的模式

像是把模式改成「All Active Threads」,就能直接訂最終數字(例如每分鐘就是要打到 2000 筆),剩下就讓 JMeter 自己去分配,可說是懶人好幫手

Constant Throughput Timer 的 Calculate Throughput based on 總共有五個選項:

模式 說明
This Thread Only 每個 Thread 各自獨立設定目標吞吐量
例如設定 20/min、開 5 個 Thread → 實際總量 100/min
All Active Threads 目標吞吐量由所有 Thread Group 的所有 Thread 共同分攤
例如設定 20/min、開 5 個 Thread → 每 Thread 各約 4/min,總量仍是 20/min
All Active Threads
in Current Thread Group
同上,但只抓當前 Thread Group 的 Thread 來分攤
All Active Threads (Shared) 和 All Active Threads 一樣意思,但所有 Thread 共用同一個計時器,請求分配會更均勻
All Active Threadss
in Current Thread Group (Shared)
基本上就是上面兩個加起來:當前 Thread Group 的所有 Thread 共用同一個計時器

可以再根據壓測的場景決定要選擇哪一個模式,供參考。


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

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

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

參考資料

還有最實際的: Image