# [測試] Jmeter 使用筆記 ## 什麼是壓力測試 網站的測試有分幾種,下面參考連結講得很清楚: [淺談測試基本觀念 – 壓力測試、負載測試、效能測試](https://www.astralweb.com.tw/introduction-of-stress-testing-load-testing-and-performance-testing/) ## 什麼是 JMeter 官方手冊:[User's Manual](https://jmeter.apache.org/usermanual/index.html) ## 環境設定 因為是跑在 JVM 上,任何作業系統安裝 Java 後皆可支援。 ### 安裝 Java 安裝網址:[Java SE Downloads](https://www.oracle.com/java/technologies/javase-downloads.html) 1. 根據自己的作業系統,選擇下載 **Java 8** 以上的版本 2. 安裝完後,根據不同平台設定環境 3. 檢查是否安裝成功:打開 terminal:輸入 `java`、`javac`,都有看到一大串東西就可以了 ### 下載 JMeter 下載網址:[Download Apache JMeter](https://jmeter.apache.org/download_jmeter.cgi) 1. Downlaod apache-jmeter-*version*.zip 2. 下載完後解壓縮,即可執行 3. 點開資料夾下的 bin,可開啟介面: - Windows 開啟 jmeter.bat - Linux / Unix / MacOS 開啟 jmeter.sh ### 安裝 JMeter Plugin (optional) 安裝網址:[Installing Plugins](https://jmeter-plugins.org/install/Install/) 1. Download plugins-manager.jar 2. Put it into lib/ext directory 3. Restart JMeter 4. 重新啟動後,在 Options 下方會出現 Plugins Manager,表示安裝成功。 *(有用到特別的功能,標配裡面沒提供才需要安裝。)* ### 修改 Java 參數 JMeter 預設只能存取 1GB 的記憶體,可以手動修改參數,調整成電腦記憶體的 80 %,能讓 JMeter 有資源開啟更多 Thread,模擬更多的測試人數。 參考:[JMeter – How to increase heap size?](https://www.perfmatrix.com/jmeter-how-to-increase-heap-size/) ## 基本功能說明 > 每個分類參考:[Elements of a Test Plan](https://jmeter.apache.org/usermanual/test_plan.html) > 每個分類下的項目參考:[18. Component Reference](https://jmeter.apache.org/usermanual/component_reference.html) ### Thread Group 位置:Threads (Users) -> Thread Group - Number of Threads (users):表示模擬使用者的數量 - Ramp-up period (seconds):在指定秒數內達到指定人數 - 設定完 Thread Group 後,Group 之下的設定就是在針對每個人模擬操作。 - 參考:[Jmeter系列(7)- 基礎執行緒組Thread Group](https://www.gushiciku.cn/pl/pLQ0/zh-tw) ### HTTP Request 位置:Sampler -> HTTP Request - 最基礎的設定 API 的樣板 - 一個 API 就用一個 HTTP Request,可以設定路徑、傳入的參數 ### Logic Controller - 控制腳本怎麼執行、管理參數存取範圍 - 參考:[【JMeter】各種邏輯控制器(Logic Controller)](https://www.twblogs.net/a/5c3f6afbbd9eee35b21e348f) ### Config Element #### HTTP Request Defaults 設定 HTTP Requests 的默認值,可涵蓋範圍內的 HTTP Request 不輸入值就會抓預設值。舉例:都是呼叫同一台伺服器的 API,IP、Protocol 皆相同,只有 Path 不同。 #### User Defined Variables 可設置指定範圍或全域變數,使用 `${variable-name}` 存取。 ### Listener 用來產生可視化結果。 #### View Results Tree 可以查看每次呼叫的 request 和 response 的內容。 #### Summary Report 統計每個 API 呼叫的次數、平均回應時間、錯誤率等資料。 #### View Results in Table 可以查看每次 request 的狀態、資料量等資訊。 ## 腳本設計 要設計測試腳本,可以評估現在是什麼樣的系統要測試什麼,再來設定: - 指定時間內 - 有多少人 - 要完成多少事 一般系統要測試負載量,不會設定極短的時間要求很多人做很多事,舉例幾千幾萬人在同一秒點開網站操作一個很複雜的流程(除非是搶購系統),除了對測試環境負荷量太大可能失敗以外,要同一時間大家發出 request 不是合理的情境。所以上述幾點會根據測試的內容,增加或減少,來達到預期的效果。 - 壓力測試:模擬短時間人潮集中在特定功能上,要做的事就會設比較少。 - 負載測試:模擬大量人潮湧入的時候,時間會設定比較寬裕,要做的事可以比較多。 - 效能測試:可以參考負載測試的報告。 ### 情境設定 ### 錄製腳本 可以應用在有介面的前端測試上,用錄製的方式快速產出腳本。 參考:[26. Apache JMeter HTTP(S) Test Script Recorder](https://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.html) ## 測試方式 ### GUI 設定腳本(產出 jmx 檔)的時候,或進行小量的測試,都可以用 GUI 做設定。但實際測試的時候建議使用 Non-GUI 模式,較不占用記憶體資源。 參考:[JMeter實戰(三) 介面使用](https://iter01.com/549766.html) ### Non-GUI 要實際跑大量測試的時候,先在 GUI 上修改 Thread Group 的參數,用 terminal 執行: ```shell= # 執行測試腳本,並將結果輸出成網頁報告 jmeter -n -t [jmx-file] -l [results-file] -e -o [report-folder] ``` 參考:[JMeter Command line mode and report dashboard 指令操作模式與報表儀表板](http://dog0416.blogspot.com/2017/06/stress-test-jmeter-command-line-mode.html) ## 其他 ### 執行範例檔 手邊有 .jmx 的檔案,或是用範例(/printable_docs/demos/)讀取操作: 1. Choose File -> open -> *filename*.jmx 2. 開啟後請檢查 Thread Group 下 Number of Threads 不超過 10。 3. 可以點上方綠色 `Start` 執行 4. 有結果會出現在報告中 ## References - [網站測試工具-JMeter教學](https://www.astralweb.com.tw/website-test-tool-jmeter-teaching/) - [JMeter 入門](https://openhome.cc/Gossip/JUnit/JMeter.html) ###### tags: `jmeter` `壓力測試` `負載測試` `效能測試` `stressTesting` `loadTesting`