2018年7月30日 星期一

Jmeter 壓力測試工具

簡介

Apache JMeter 是 Apache 開發的壓力測試套件,程式是以JAVA寫成,可以在 Unix-Like 上執行,也可以在 MS-Windows 上執行,本篇是在 Mac OS X 上執行。
Apache JMeter

安裝

  • Oracle JAVA
  • Apache JMeter下載網址
    解壓縮檔案後,執行 bin 目錄下的 jmeter.bat ,Unix/Mac OS X 請執行 jmeter.sh
    (不保證舊版或新版JMeter畫面和此版相同)

執行

點選 Jmeter.sh 開啟程式
op 螢幕快照 2018-07-27 上午10.45.18.png
op 螢幕快照 2018-07-27 上午10.47.17.png

step 1 設定 Thread Group 群組

在 Test Plan 上點右鍵, Add → Threads (Users) → Thread Group
op 螢幕快照 2018-07-27 上午10.48.50.png

step 2

Thread Properties
  • Number of Threads(users) 設定會有幾個使用者來存取 (測試) 我們的服務
  • Ramp-Up Period (in seconds) 指得是「在幾秒內達到所設定的使用者人數」,可以讓受測服務一開始不會接受到太過巨量的 Requests
op 螢幕快照 2018-07-27 上午10.52.58.png

step 3 模擬 每個使用者,都會對我們的服務存取一定的次數

在 Thread Group 上點右鍵, Add → Logic Controller → Loop Controller
op 螢幕快照 2018-07-27 上午10.54.17.png
設定 Loop count (迴圈/重複執行次數)為 100 次
op 螢幕快照 2018-07-27 上午10.58.56.png
設定完 Thread Group 和 Loop Count 後,也就等於控制了對受測服務所發出的 request 數量,這邊作個簡單的計數的話就是:
100 (Users) * 100 (Loop Count) = 10,000 (Requests)
也就是我們的服務將接受 10,000 次 requests 的測試。

step 4 設定要測試的 http request 資料

建立一個 HTTP Request。在 Loop Controller 上點右鍵, Add → Sampler → HTTP Request
op 螢幕快照 2018-07-27 上午11.00.00.png
輸入要測試的內容值
設定 API 參數:
IP: 127.0.0.1
Method: POST
Path: /api/v1/member
勾選 Use multipart/form-data for POST
Send Parameters With the Requests:
  • account: ${V(TestA10${Random(100000,100000000000,)}@gmail.com)}
    亂數產生 TestA10 {亂數100000-100000000000} @gmail.com
  • password: 123456
  • nickname: ${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}
    隨機10個英文字
  • device_id: ${__UUID} 隨機產生 UUID
    設到這裡基本上就可以開始測試了,接下來要設的是針對壓力測試結果的報表。
    op 螢幕快照 2018-07-27 上午11.03.59.png

step 5 View Results Tree

Loop Controller 上點右鍵, Add → Listener → View Results Tree 加入 View Results Tree 來記錄每一筆 Request 的結果
op 螢幕快照 2018-07-27 上午11.13.34.png
Loop Controller 上點右鍵, Add → Listener → Summary Report 加入 Summary Report 來統計 Request 的結果
op 螢幕快照 2018-07-27 上午11.15.42.png
Loop Controller 上點右鍵, Add → Listener → Graph Results 加入 Graph Results 以圖表顯示執行的結果
op 螢幕快照 2018-07-27 上午11.16.17.png

step 6 開始測試

點選綠色向右的三角形執行
op 螢幕快照 2018-07-27 上午11.16.58.png
執行結束,Summary Report
op 螢幕快照 2018-07-27 上午11.33.50.png
Graph Results 的結果長醬子,由於是存取localhost 所以大多request是 7.9秒 就處理完成。
op 螢幕快照 2018-07-27 上午11.38.04.png
View Results Tree 裡可以看到實際傳回的 request 和 response data.
op 螢幕快照 2018-07-27 上午11.34.12.png

step 8 清除任務,重新開始

點選齒輪掃把圖示來清楚記錄,清除完成後再點選三角形執行
op 螢幕快照 2018-07-27 上午11.23.36.png

常用 Debug

設定 一個使用者 ,一個迴圈,來測試
使用 View Results Tree 來查看 Request 是否正常
op 螢幕快照 2018-07-27 上午11.26.39.png
Sampler result
op 螢幕快照 2018-07-27 上午11.29.58.png
Request
op 螢幕快照 2018-07-27 上午11.30.06.png
Response data
op 螢幕快照 2018-07-27 上午11.30.12.png

進階應用

websocket

流程測試

  1. 計時器 counter 使用
  2. 創建會員 依據計時器來創建依序的會員
  3. 登入 輸入帳號密碼,取得使用者 ID and Token

常見問題

執行前要先儲存專案
op 螢幕快照 2018-07-27 上午11.20.51.png
op 螢幕快照 2018-07-27 上午11.30.12.png
op 螢幕快照 2018-07-27 上午11.30.06.png
op 螢幕快照 2018-07-27 上午11.34.12.png

結論

台灣人工智慧學校第四屆開學典禮

台灣人工智慧學校  第四屆 開學典禮       今天 AI 學校開學,非常特別像參加研討會一樣,開場介紹孔祥重校長和陳昇瑋執行長為什麼會創建這間學校,主要是他們發現AI技術可以幫助產業界解決很多問題,但是人才問題嚴重,希望透過一年三期每期500左右的規模並在北中南都有分校,來...