環境准備:
jmeter插件下載:
mqttxmeter1.0.1jarwithdependencies.jar
把MQTT插件放在 %JMeter_Home%/lib/ext下。重啟jmeter.
MQTT連接。
Server name or IP: 被測MQTT服務器地址。
Port number: TCP連接的端口1883, SSL連接則是8883。
Timeout(s): 連接超時設置,以秒為單位。
user name: 連接MQTT的帳戶名。
password: 連接MQTT的密碼。(具體詢問開發)
ClientId: 客戶端標識,具體詢問開發被模擬的客戶端標識(注意一個標識快速連接多次會連接失敗,並發記得參數化(經驗))。
Keep alive(s): 心跳信號發送間隔。例如,300表示客戶端每隔300秒向服務器發出ping請求,以保持連接活躍。(注意,不正常disconnect,連接還會繼續保持。除非關掉jmeter. 正常mqtt disconnect請無視。)
Connect attempt max: 第一次連接失敗后,嘗試重連的最大次數。超過該次數則認為連接失敗。
Reconnect attempt max: 后續連接過程中連接失敗后,嘗試重連的最大次數。超過該次數則認為連接失敗。
好了,連接上就可以進行消息發布了。
MQTT發布
QoS Level: 服務質量,取值為0,1,2,分別代表MQTT協議規范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精確一次(EXACTLY_ONCE)(網上COPY,具體我就用了0,用1 2發送失敗。)
Topic name: 做為發布方,把消息發布到所屬的話題中。
Add timestamp in payload: 如果勾選,發布的消息體開頭會附帶當前時間戳,利用它可以在消息接收端計算消息達到的延時。不勾選則只發送實際的消息體。
- Message type: 目前支持三種消息類(我只用了String,其它請看網上的其它介紹。)
- String: 普通字符串 (如上面截圖所示,你要發送的消息。具體上報什么,可找開發要相關json等。)
- Hex String: 以16進制數值表示的串,比如字符串Hello, 可以表示為48656C6C6F (其中,48在ascii表中對應字母H,依次類推)。通常16進制串用來構造非文本的消息體,例如描述某些私有的協議交互和控制信息等等。
- Random string with fixed length*: 按指定長度生成隨機的串作為消息體。
此時消息發送成功了。
消息訂閱
topic name(s): 想要訂閱的主題。(可以訂閱多個)多個主題以英文逗號分隔。
Sample on:
- specified elapsed time(ms): 訂閱的主題每多少毫秒作為一個結果展示(個人理解)。在這些毫秒內所收到的消息全部展示在一個結果內。
- number of received messages: 每收到多少個消息作為一個結果展示(個人理解)。
斷開連接
注意:主動支行MQTT DisConnect可以斷開。若測試過程中手動停止,致使線程未運行DisConnect,則連接不會斷開。(已經過驗證。)
測試過程中遇到的問題:
- MQTT連接數未修改。連接到1W報錯連接失敗。
- 修改MQTT連接數后,成功並發到5W,后續還會再進行測試。