WebSocketの負荷試験をJMeterでやる(kawasima / jmeter-websocket使用)
こちらで公開されているWebSocketサンプラを使います。
WebSocketを負荷テストする: overflow:auto
WebSocketの知識が足りないままやってて色々とハマったのでそのメモになります。
WebSocketの流れ
WebSocketを接続するためには2回のリクエストが必要になります。
まずhttpでWebSocket接続に使用するセッションIDを取得します。
Responseの先頭がセッションIDです。
上記で取得したセッションIDをWebSocketのパスに加えてWebSocketリクエストします。
JMeterでどう書くの?
こんな感じで特に難しいことはないです。
タイムスタンプ生成(必須かわからないけどブラウザの挙動をなるべくエミュレートしたくて)。
セッションIDを取得するためのhttpをリクエスト。
正規表現でレスポンスからセッションIDを取得して変数に設定。
セッションIDをパスに追加してWebSocketをリクエスト。
使用したjmxはGistに上げてます。
WebSocket負荷テスト.jmx
もう一つのハマりどころ
WebSocketサンプラの送信メッセージで何も送らなかったり不正なメッセージを送るとレスポンスが返ってこずタイムアウトになります。。
ここで送る値はChromeデバッガのこの部分表示される値になります。
ちなみに頭の「1::」とか「5::」とかはWebSocketのオペレーションコードの様です。送信するメッセージが無い場合は「1::」を指定すればうまくいきました。
以上です。あまり情報が見つからなかったので誰かの助けになれば幸いです。
(追記)
Twitterにて指摘頂きました。1::〜はSocket.IOの仕様でWebSocketとは関係ないとのことです。勘違いしてました。。
@y_koh 1::~というのはSocket.IO独自のメッセージフォーマットでWebSocketとは関係ありません。Socket.IOのフォーマット仕様はこちらに書かれています。https://t.co/UUekfClsoq
— gtk2k (@gtk2k) 2014, 2月 23
リンク先からMessagesの見出しを引用しておきます。詳細はリンク先を参照してください。
(0) Disconnect
https://github.com/LearnBoost/socket.io-spec#messages
(1) Connect
(2) Heartbeat
(3) Message
(4) JSON Message
(5) Event
(6) ACK
(7) Error
(8) Noop