轉帳地址:http://www.cnblogs.com/saryli/p/6928051.html
若有侵權,請聯繫我刪除,感謝做者的文章對個人幫助。html
今天咱們介紹XMeter團隊帶來的新版MQTT-JMeter插件,您能夠更爲方便地添加MQTT鏈接、發佈、訂閱取樣器,構造組合的應用場景,例如背景鏈接、多發少收、少發多收,計算消息轉發時延等。利用該插件,咱們爲EMQ成功實施了包括百萬級併發鏈接在內的一系列測試場景,這裏有詳細的測試報告。git
該插件發佈在github,歡迎下載、使用並告訴咱們您的意見建議。github
下面介紹一下插件的使用方法。web
安裝
從github下載您須要的release版本, 解壓mqtt–xmeter-jar-with-dependencies.jar.zip, 將生成的jar文件放到JMeter安裝主目錄的lib/ext下,重啓JMeter,就能夠看到插件成功加載。服務器
【注】推薦在最新的JMeter3.1或者3.0版本中安裝使用本插件。併發
鏈接操做取樣器
- Server name or IP: 指向被測MQTT服務器地址。【注】爲靈活起見,屬性值均可以引用JMeter的系統或自定義變量。
- Port number: 一般TCP鏈接的端口時1883, SSL鏈接則是8883。請參照服務器的具體配置。
- Timeout(s): 鏈接超時設置,以秒爲單位。
- Protocols: 客戶端與服務器經過SSL加密通道鏈接時,能夠選擇單向或者雙向認證(Dual)。雙向認證時,您還須要指定相應的信任祕鑰庫(Trust Key Store), 客戶端證書,以及對應的文件保護密碼(Secret)。這些文件能夠經過服務器的證書配置轉化獲得。例如,對於EMQ的安裝部署,/etc/cert下就存放了自簽證的CA,服務器及客戶端證書,參考下面的命令就能夠生成插件所需的.jks, .p12文件,secret自行指定便可。
- User authentication: 若是服務器配置了用戶認證,您須要提供相應的用戶名和口令。
- ClientId prefix: 標識客戶端的固定前綴,每一個鏈接(虛擬用戶)再添加一個uuid串,整個做爲客戶標識。
- Keep alive(s): 心跳信號發送間隔。例如,300表示客戶端每隔300秒向服務器發出ping請求,以保持鏈接活躍。
- Connection keep time(s): 鏈接創建後,保持該鏈接的時長。例如,1800表示1800秒以後鏈接將被關閉,即便一直髮送心跳信號。
- Connect attempt max: 第一次鏈接過程當中,嘗試重連的最大次數。超過該次數則認爲鏈接失敗。
- Reconnect attempt max: 後繼鏈接過程當中,嘗試重連的最大次數。超過該次數則認爲鏈接失敗。
發佈操做取樣器
發佈(Pub)取樣器的鏈接相關屬性與鏈接取樣器徹底相同,下面只介紹Pub特有的屬性。dom
- QoS Level: 服務質量,取值爲0,1,2,分別表明MQTT協議規範裏的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精確一次(EXACTLY_ONCE)
- Topic name: 發佈消息所屬的話題 (訂閱方能夠根據話題不一樣選擇訂閱)
- Add timestamp in payload:若是勾選,發佈的消息體開頭會附帶當前時間戳,利用它能夠在消息接收端計算消息達到的延時。不勾選則只發送實際的消息體。
- Message type: 目前支持三種消息類
- String: 普通字符串 (如上面截圖所示)
- Hex String: 以16進制數值表示的串,好比字符串Hello,能夠表示爲48656C6C6F(其中,48在ascii表中對應字母H,依次類推)。一般16進制串用來構造非文本的消息體,例如描述某些私有的協議交互和控制信息等等。
- Random string with fixed length: 按指定長度生成隨機的串做爲消息體。
訂閱操做取樣器
- QoS Level: 服務質量,含義與發佈操做取樣器相同。
- Topic name: 訂閱消息所屬的話題。
- Payload includes timestamp: 若是勾選,會從消息體開頭處解析發送時間戳,用於計算消息的接收延時。
- Debug response: 若是勾選,消息內容會打印在JMeter的響應結果中,用於調試目的。正式運行測試建議不勾選。
混合負載的測試場景
運用以上3種MQTT取樣器,結合JMeter靈活的測試控制,您能夠制定各類類型的測試場景。下面咱們舉一個例子,構造一個混合負載的場景。svg
咱們定義3個虛擬用戶組,分別進行鏈接,發佈,訂閱操做。測試
- 鏈接者:虛擬用戶數=10, 發起10個到服務器的背景鏈接,每2秒鐘發一次心跳請求,15秒後斷連。
- 發佈者:虛擬用戶數=5,每隔一秒發送一條32字節的隨機串,帶時間戳,循環10次結束。
- 訂閱者:虛擬用戶數=2,接收相應話題上的消息,每隔一秒輸出採樣間隔裏接收到的消息統計,循環10次結束。
在JMeter中運行該場景,15秒鐘左右運行結束。能夠在測試結果樹中看到每一個操做的詳細信息。表格視圖的」Sample Time」列出了操做花費的時間(毫秒)。因爲此次測試在本地,併發用戶數不多,因此鏈接、消息發送、接收時延都很短。您能夠指向實際的MQTT服務器,模擬更大的併發用戶數。
ui
結果樹
結果列表
在被測的EMQ服務器本身的度量儀表盤,咱們能夠看到鏈接、消息發送,接收等統計信息。
【注】服務器的」received」, 「sent」分別對應JMeter測試中的「發送者」和「訂閱者」。