概要
負荷テストのためのツール検証を実施していた際、JMeterでWebSocket通信ができるか検証した結果をまとめました。
環境
検証では、JMeterのバージョン5.6.3を利用しました。
通信先はMattermostコンテナを利用しています。環境構築手順は以下の記事を参照してください。
検証手順
WebSocket通信用プラグインの追加
以下のサイトから最新版のWebSocket通信用プラグインをダウンロードします。
上記サイトで検索すると、WebSocket通信に対応したプラグインは以下の2種類がありますが、
今回の検証では後者の「WebSocket Samplers by Peter Doornbosch」を利用しています。
ダウンロードしたプラグインファイル(jmeter-websocket-samplers-X.X.XX.jar)をJMeterのlib/extフォルダ配下に配置し、
ファイル読込のためJMeterを再起動すると、以下のようにWebSocket用のサンプラーが追加されます。
WebSocket接続の開始
WebSocket通信を開始するには、WebSocket Open Connection
サンプラーを使用します。
Server URL
にプロトコル、通信先ドメイン名/IPアドレス、ポート番号、Pathを設定します。
本サンプラーを実行すると、HTTPからWebSocketへのスイッチが行われます。
WebSocket通信
WebSocketでデータのやりとりを行う場合、以下のサンプラーを利用します。
- WebSocket Ping/Pong
WebSocketセッション維持のためのハートビート通信を行います。
- WebSocket Single Read Sampler
新規/既存WebSocketセッションを指定して、データの受信を行います。
- WebSocket Single Write Sampler
新規/既存WebSocketセッションを指定して、データの送信を行います。
- WebSocket request-response Sampler
新規/既存WebSocketセッションを指定して、データの送受信を行います。
WebSocket接続の終了
WebSocket接続を終了する場合は、WebSocket Close
サンプラーを使用します。
クローズ時のステータスコードを設定します。デフォルト値は1000(通常のクローズ)です。
Mattermostの通信内容を分析して、以下のようなJMeterシナリオを作成・実行してみましたが、WebSocket接続の開始~終了までエラーなく再現できました。
参考
https://qiita.com/nkns165/items/8cd82bf8b93826dfdca2
https://www.alibabacloud.com/help/ja/pts/performance-test-pts-3-0/use-cases/how-to-perform-pressure-measurement-of-websocket-protocol