最近有個系統需要進行壓測,剛好以前有稍微碰過 jmeter,但並沒有寫筆記記錄。
藉此趁這個機會來複習一下,順便記錄一下使用心得。
壓測工具有很多比較著名的像是 ApacheBench、JMeter、k6….,
而當初選擇 Jmeter 主要是因為一張梗圖 XD ,原圖我就不放在這。
有興趣可以去原網址看。
我這邊附上我自己做的
JMeter 介紹 #
JMeter 與 ApacheBench (AB) 一樣都是 Apache 基金會所維護都開源專案,但與 AB 不同是 AB 只能進行 HTTP 的壓測且只提供 command 的方式,JMeter 支援更多的協定像是基本的 HTTP/S、FTP、JDB,且他還提供 GUI 介面讓用戶可以更直觀的使用。
JMeter 安裝 #
JMeter 的安裝很簡單,他是由 Java 所撰寫且支援多種平台(Windows、Linux、Mac)只要有裝 Java 8+ 就可以執行,安裝方式只要去官網下載他的 Binaries 檔,下載完後直接解壓縮打開即可。
執行檔位置解壓縮後的 bin 目錄底下。如下圖:
因為我是在 mac 上面操作,所以有遇到被 mac 判定為惡意軟體然後開不起來的狀況。
記得去系統設定→隱私權及安全性頁面 拉到最下面就可以看到“已阻擋的訊息”,點擊強制開啟就可以執行。
JMeter 操作說明 #
由於 JMeter 的功能很多,我這邊只介紹我平常在用的,如果你要進行簡單的壓測 API,那看我等等介紹的就夠了,更詳細的可能就要找其他大神XD
開啟 JMeter #
打開 JMeter 後會看到有一個 Test Plan,Plan 為 JMeter 儲存的基本單位,你可以設定完後把 Plan 存下來,另外一個頁面只能存在一個 Plan,但如果你想要同時操作有多個 Plan 你可以開多個視窗。
如下圖
常用參數介紹
- Run Thread Groups consecutively:一個 Plan 可以存在很多 Thread Group ,這個參數可以用來設定你在執行 Plan時,每個 Thread Groups 是同時進行壓測,還是一個執行完後換下一個。
創建 Thread Group #
Thread Group (線程組):用來定義壓測時的用戶數,啟動時間和循環次數等。
創建方式如下:
Thread Group 頁面如下:
常用參數說明:
- Number of Thread (users):使用者數量。
- Ramp-up period (seconds):啟動所有 Thread (users)所需要的時間。
- Loop Count: 每個 Thread 執行的次數,如果勾選 Infinite 則會一直跑。
如果我今天要模擬 100 位用戶同時進入登入我的網站,那我的設定如下:
- Number of Thread (users):100
- Ramp-up period (seconds):5
補充一下,一般的情況下用戶不太可能真的同時進入,而是一個超短時間 因次我沒有設定 1 之類的時間。 - Loop Count: 1
加入 HTTP Request #
常見的壓測大多都是壓測 API,因此我們需要設定一個 HTTP 請求,來指定 JMeter 要攻擊的位置。
創建方式:右鍵點擊 Thread Group → Add → Sampler → Http Request
畫面如下:
這邊要注意的是如果是 post 要上傳檔案,要點擊 Parameters 最旁邊的 Files Upload,下方畫面就會切過去。
加入 HTTP Header Manager #
有時候 API 在呼叫時會需要在 Header 設定一些參數,例如 Accept、Authorization 等。
創建方式:右鍵點擊 Thread Group → Add → Config Element → Http Header Manager
畫面如下:
加入監聽器 #
最後當然是要來查看我們壓測的結果,以下三個 Listener 為我在測試時常用到的 Listener。
-
Summary Report 這個報告主要會提供每個 sampler (取樣)的測試結果。相同的 Label 壓測結果會合併在一起。
- 創建方式:右鍵點擊 Thread Group → Add → Listener → Summary Report
- 畫面如下:
- 常用參數說明:
- Label 是對應到 sampler 的 name,也就是在設定 HTTP Request 中的 name。
- Samples:這個是請求的數量。
- Average:為每個請求的平均回應時間(單位毫秒)
- Min:為所有請求中最小的回應時間(單位毫秒)
- Max:為所有請求中最大的回應時間(單位毫秒)
- Error %:請求錯誤的百分比。
- Throughput:每秒處理的請求量。
- KB/sec:每秒處理的數據量 (以 KB 為單位)。
-
View Results Tree 這邊可以查看每個請求的結果、還有回應訊息。如果 api 有錯誤訊息也可以從這邊看。
- 創建方式:右鍵點擊 Thread Group → Add → Listener → View Results Tree
- 畫面如下:
-
View Results in Table: 這個是把每個請求的資料表格化,可以看到
- 創建方式:右鍵點擊 Thread Group → Add → Listener → View Results in Table
- 畫面如下:
以上為我平常使用 Jmeter 的操作說明,其實 Jmeter 的功能非常的多,可以實現很多種壓測狀況。 目前其實沒有玩得很深,日後如果有使用到其他的功能會再慢慢補上。
應該大家都知道梗圖是出自葬送的芙莉蓮這部動畫,如果不知道的趕快去看一下XD
另外就順便推薦一下芙莉蓮第二季的 OP !!!
以下 YT 影片畫面會有劇透,還沒看過的先去看完後再回來XD