性能測試PTS(Performance Testing Service)是面向所有技術相關背景人員的雲化性能測試工具,孵化自阿里內部平台。有別於傳統工具的繁復,PTS以互聯網化的交互,面向分布式和雲化的設計,更適合當前的主流技術架構。無論是自研還是適配開源的功能,PTS都可以輕松模擬大量用戶訪問業務的場景,任務隨時發起,免去搭建和維護成本。更是緊密結合監控類產品提供一站式監控、定位等附加價值,高效檢驗和管理業務性能。
腳本工具:Apache JMeter
壓測平台: PTS
測試目的
供應鏈客戶端往往由於生產環境復雜,會產生卡頓現象,故展開本次調優性能測試境產生卡頓現象,通過壓測來了解網關是否存在問題。
測試原則
1. 選擇用戶使用頻率較高的業務功能
2. 選擇用戶核心業務功能
3. 監控和分析系統各服務器的性能,同時也包括應用服務器的性能問題
4. 重點分析交易的響應時間,即客戶端發起請求,到應用服務器返回結果到客戶端的時間,包括網絡傳輸的時間,但不包括客戶端應用程序處理返回結果的時間。
測試方法
利用Jmeter模擬前台客戶端發起Socket協議請求,即在每個測試用例中,由Jmeter發送前台應用程序的Socket報文到后台應用服務器,測試后台應用服務器和數據庫服務器處理客戶端應用請求的能力。
測試指標
1、交互相關
- 交互數量
- 交互響應時間
2、應用服務器相關
- CPU使用率
- 內存使用率
測試環境
本次性能測試在uat環境中執行,使用單網關、單服務器進行壓測。
生產環境目前是10個網關,8台服務器。
測試數據量
在生產環境中已增加以下業務數據,並在測試用例中挑選有代表性的業務數據進行測試:
編號 |
業務類型 |
業務數據量 |
1 |
登錄 |
300 |
2 |
序列號掃描 |
300 |
3 |
訂單查詢 |
50 |
4 |
包裝號校驗 |
300 |
5 |
組建序列號掃描 |
300 |
測試腳本的創建
- 將一個線程組添加到測試計划中,單擊測試計划 > 添加 > Thread (Users) > 線程組。
- 在線程組中添加采樣器(Sampler),單擊線程組 > 添加 > Sampler > 對應的 Sampler,並配置每個 Sampler。
- 在線程組中添加監聽器 View Results Tree。
- 運行腳本。通過 View Results Tree 監聽器查看腳本是否運行正常。
WebSocket Open Connection
將 WebSocket Open Connection Sampler 添加到線程組。單擊線程組 > 添加 > Sampler > WebSocket Open Connection。
如何安裝 JMeter-WebSocketSampler
下載最新的 JMeter-WebSocketSampler,如 JMeterWebSocketSamplers-1.2.1.jar。
將該文件放置到 JMeter 的安裝目錄(…/lib/ext)下。
重啟 JMeter。
如果插件安裝成功,JMeter GUI 中可看到以下新增的選項:
- 配置元件選項(Config Element):WebSocket Binary Frame Filter、WebSocket Text Frame Filter 和 WebSocket Ping/Pong Frame Filter;
- 斷言選項(Assertions):Binary Response Assertion;
- 察看結果樹選項(View Results Tree):Binary;
說明:我們以 Gateway Echo 服務來創建我們的腳本(ws://echo.websocket.org)。這是一個Echo 服務,因此發送到此服務的所有消息都將回顯給客戶端。
當前的 Sampler 將建立 WebSocket 連接。相關的配置如下:
配置項 |
示例值 |
說明 |
協議 |
WS |
協議可以是 WS 或 WSS(Secure WebSocket)。使用 WSS 進行加密連接。 |
Server name or IP |
echo.websocket.org |
域名 或 IP |
Port |
80 |
端口 |
Path |
( 空) |
可為空 |
Connection timeout(ms) |
20000 |
建連的超時時間。 |
Read timeout(ms) |
6000 |
等待服務器響應的超時時間。 |
WebSocket Ping / Pong
將 WebSocket Ping / Pong Sampler添加到線程組,單擊線程組 > 添加 > Sampler > WebSocket Ping/Pong。該Sampler用來測試 Ping/Pong 功能。
相關配置如下:
- Pong(讀)超時(ms):6000
Pong 超時表示如果 JMeter 在 6 秒內沒有收到 Pong 消息,則 Sampler 將失效。此 Sampler 會復用已有連接。
WebSocket request-response Sampler
將 WebSocket request-response Sampler 添加到線程組,單擊線程組 > 添加 > Sampler > WebSocket request-response Sampler。該 Sampler 將用於發送文本的一個數據幀並從服務端接收應答。
相關配置如下:
配置項 |
示例值 |
說明 |
Connection |
use existing connection |
創建新的連接或復用已有連接。 |
數據類型 |
文本 |
指定數據類型、請求數據和響應超時值。 |
Request data |
PTS |
請求數據,這里以文本為例 |
Response(read)timeout(ms) |
6000 |
響應超時時間 |
WebSocket Single Write Sampler
將 WebSocket Single Write Sampler 添加到線程組,單擊線程組 > 添加 > Sampler > WebSocket Single Write Sampler 此請求是非阻塞的,只是將數據發送到服務端不需要等待響應。
相關配置如下:
配置項 |
示例值 |
說明 |
Connection |
use existing connection |
創建新的連接或復用已有連接 |
數據類型 |
文本 |
指定數據類型、請求數據和響應超時值 |
Request data |
PTS |
請求數據,這里以文本為例 |
Response(read)timeout(ms) |
6000 |
響應超時時間 |
WebSocket Single Read Sampler
將一個 WebSocket Single Read Sampler 添加到線程組,單擊線程組 > 添加 > Sampler > WebSocket Single Read Sampler。接收服務端的消息響應需要使用這個 Sampler。
配置以下參數:
配置項 |
示例值 |
說明 |
Connection |
use existing connection |
創建新的連接或復用已有連接 |
數據類型 |
文本 |
指定數據類型、請求數據和響應超時值 |
Response(read)timeout(ms) |
6000 |
響應超時時間 |
WebSocket Close
將一個WebSocket Close Sampler添加到線程組,單擊線程組 > 添加 > Sampler > WebSocket Close。
配置以下參數:
配置項 |
示例值 |
說明 |
關閉狀態 |
二進制 |
關閉連接時定義的狀態碼,數據幀的頭兩個字節 |
響應(讀取)超時(毫秒) |
6000 |
/ |
此采樣器將關閉現有的 WebSocket 連接,由於是協商關閉,顯示原因為 “1000:sampler requested close”。
使用 View Results Tree 查看結果
- 將 View Results Tree 監聽器添加到線程組,單擊線程組 > 添加 > 監聽器 > View Results Tree。
- 運行腳本!
通過 View Results Tree 監聽器,檢查所有 Sampler 是否都配置正確並符合預期。在該監聽器中,如果 Sampler 前面有綠色勾表示運行正常。下面羅列一些截圖:
上傳到PTS
將調試好的 JMeter 腳本(XML 文件)、JMeter-WebSocketSampler 的 JAR 文件和其他數據文件(如有)上傳到 PTS,設置並發數和壓測時間,單擊保存並壓測便可開始壓測。