パフォーマンス テスト (PTS) の Apache JMeter ベースのパフォーマンス テスト機能は、Apache JMeter によって生成されたスクリプトに依存します。このトピックでは、オンプレミス マシンで Apache JMeter を使用してパフォーマンステスト スクリプトを作成およびデバッグする方法、および PTS で WebSocket のパフォーマンステストを実行する方法について説明します。このトピックでは、JMeter WebSocket Samplers プラグインを使用します。
概要
Apache JMeter を使用して WebSocket のパフォーマンステスト用のスクリプトを生成し、PTS でパフォーマンステストを実行するには、次の手順を実行します。
1. JMeter WebSocket Samplers プラグインをインストールする
JMeter WebSocket Samplers プラグインをダウンロードします。プラグインの最新バージョンをダウンロードすることをお勧めします。このトピックでは、JMeterWebSocketSamplers-1.2.10.jar を使用します。
ダウンロードしたプラグインの JAR パッケージを <Apache JMeter インストール ディレクトリ>/lib/ext ディレクトリに保存します。
重要PTS でパフォーマンステストを実行する場合は、JAR パッケージを PTS にアップロードする必要があります。
Apache JMeter を再起動し、次の手順を実行してプラグインがインストールされているかどうかを確認します。
[テスト計画] を右クリックし、[追加] > [設定要素] を選択します。次の要素が表示されているかどうかを確認します:[websocket バイナリ フレーム フィルター]、[websocket Ping/pong フレーム フィルター]、[websocket テキスト フレーム フィルター]。

[テスト計画] を右クリックし、[追加] > [アサーション] を選択します。[バイナリ レスポンス アサーション] アサーションが表示されているかどうかを確認します。

[テスト計画] を右クリックし、[追加] > [リスナー] > [結果ツリーの表示] を選択します。[テキスト] ドロップダウン リストに [バイナリ] が表示されているかどうかを確認します。

[テスト計画] を右クリックし、[追加] > [スレッド(ユーザー)] > [スレッド グループ] を選択します。[スレッド グループ] を右クリックし、[追加] > [サンプラー] を選択します。次の図に示すサンプラーが使用可能かどうかを確認します。
重要WebSocket は、長時間接続を介してストリーミング通信チャネルを提供するプロトコルです。したがって、1 つのリクエストに対して複数のレスポンスが返される場合があります。レスポンスは、時系列順にレスポンス キューに配置されます。読み取り操作を含むサンプラーが実行されると、キューの先頭からレスポンスが取得されます。レスポンスを受信すると、レスポンスはキューの末尾に配置されます。
WebSocket シングル読み取りサンプラーは、キューの先頭からレスポンスを読み取るだけで、タイムアウトが発生するまでレスポンスを待ちます。
WebSocket シングル書き込みサンプラーは、接続チャネルにリクエストを送信するだけで、レスポンスを待ちません。
WebSocket リクエスト レスポンス サンプラーは、接続チャネルにリクエストを送信し、レスポンス キューの先頭からレスポンスを読み取ります。このサンプラーは、タイムアウトが発生するまでレスポンスを待ちます。
接続内の読み取りサンプラーの数と書き込みサンプラーの数が一致しない場合、読み取りデータの位置がずれる可能性があります。
プロキシ サービス、データ フィルタリング、データ シャーディングに使用されるサンプラーの詳細については、「JMeter WebSocket Samplers」をご参照ください。
2. スクリプトを作成する
このセクションでは、テスト シナリオにサンプラーを追加および設定する方法について説明します。このセクションは参考用です。ビジネス要件に基づいてサンプラーを追加および設定できます。
[テスト計画] を右クリックし、[追加] > [スレッド(ユーザー)] > [スレッド グループ] を選択して、テスト計画にスレッド グループを追加します。
[スレッド グループ] ペインで、サンプラーを順番に追加および設定します。次の表にサンプラーを示します。
サンプラー
説明
[websocket 接続を開く]
WebSocket 接続を開始します。
[websocket Ping/pong]
ping フレームを送信し、pong フレームを受信します。
[websocket リクエスト レスポンス サンプラー]
テキスト型とバイナリ型の WebSocket フレームを送受信します。
[websocket シングル書き込みサンプラー]
テキスト型とバイナリ型の WebSocket フレームを送信します。
[websocket シングル読み取りサンプラー]
テキスト型とバイナリ型の WebSocket フレームを受信します。
[websocket を閉じる]
WebSocket 接続を閉じます。
[スレッド グループ] を右クリックし、[追加] > [サンプラー] > [websocket 接続を開く] を選択します。
説明[サーバー URL] セクションで、テストするサービスを設定します。この例では、Python 用 SDK を使用して構築された単純な WebSocket サービスを使用します。WebSocket サービスは Echo サービスであり、このサービスに送信されたすべてのメッセージはクライアントにエコーされます。
server.pyサンプルコードimport asyncio import websockets # クライアントから受信したメッセージをエコーバックする async def echo(websocket, path): async for message in websocket: message = "Your message: {}".format(message) await websocket.send(message) # WebSocketサーバーを起動する asyncio.get_event_loop().run_until_complete(websockets.serve(echo, '0.0.0.0', 8080)) asyncio.get_event_loop().run_forever()[スレッド グループ] を右クリックし、[追加] > [サンプラー] > [websocket Ping/pong] を選択します。
説明[Pong(読み取り)タイムアウト(ミリ秒)] パラメーターを 6000 に設定します。
この設定は、Apache JMeter が 6,000 ミリ秒以内に pong メッセージを受信しない場合、サンプラーが失敗することを示します。この場合、サンプラーは既存の接続を再使用します。
[スレッド グループ] を右クリックし、[追加] > [サンプラー] > [websocket リクエスト レスポンス サンプラー] を選択します。

パラメーター
値の例
説明
接続
既存の接続を使用する
新しい接続を確立するか、既存の接続を再利用するかを指定します。
データ型
テキスト
データの型。
リクエスト データ
PTS
リクエスト データ。この例では、テキスト データが使用されます。
レスポンス(読み取り)タイムアウト(ミリ秒)
6000
レスポンスのタイムアウト期間。
[スレッド グループ] を右クリックし、[追加] > [サンプラー] > [websocket シングル書き込みサンプラー] を選択します。WebSocket シングル書き込みサンプラーはノンブロッキング サンプラーです。サンプラーはサーバーにデータを送信するためだけに使用され、レスポンスを待ちません。

パラメーター
値の例
説明
接続
既存の接続を使用する
新しい接続を確立するか、既存の接続を再利用するかを指定します。
データ型
テキスト
データの型。
リクエスト データ
PTS bang bang bang
リクエスト データ。この例では、テキスト データが使用されます。
[スレッド グループ] を右クリックし、[追加] > [サンプラー] > [websocket シングル読み取りサンプラー] を選択します。WebSocket シングル読み取りサンプラーは、レスポンスを受信するためだけに使用されます。

パラメーター
値の例
説明
接続
既存の接続を使用する
新しい接続を確立するか、既存の接続を再利用するかを指定します。
データ型
テキスト
データの型。
レスポンス(読み取り)タイムアウト(ミリ秒)
6000
レスポンスのタイムアウト期間。
[スレッド グループ] を右クリックし、[追加] > [サンプラー] > [websocket を閉じる] を選択します。[WebSocket を閉じる] は、ネゴシエーションに基づいて既存の WebSocket 接続を閉じるために使用されます。レスポンス メッセージは
1000:sampler requested closeです。
パラメーター
値の例
説明
閉じるステータス
1000
ステータスコード。接続が閉じられたときに送信されるデータ フレームの最初の 2 バイトです。
レスポンス(読み取り)タイムアウト(ミリ秒)
6000
レスポンスのタイムアウト期間。
オプション。通信中にトークンなどのヘッダーを追加する場合は、[スレッド グループ] をクリックし、[追加] > [設定要素] > [HTTP ヘッダー マネージャー] を選択します。[HTTP ヘッダー マネージャー] 要素をスレッド グループに追加し、ヘッダーを追加します。詳細については、「Apache JMeter ドキュメント」をご参照ください。
[スレッド グループ] を右クリックし、[追加] > [リスナー] > [結果ツリーの表示] を選択して、[結果ツリーの表示] リスナーをスレッド グループに追加します。
3. スクリプトをデバッグする
スクリプトを作成したら、ページ上部の [開始] ボタンをクリックしてスクリプトを実行します。
[結果ツリーの表示] リスナーを使用して、スクリプトが期待どおりに実行されているかどうかを確認します。[結果ツリーの表示] ページで、サンプラーの前に緑色のチェックマークが表示されている場合、サンプラーは期待どおりに実行されています。サンプラーの実行に失敗した場合は、スクリプトを作成する に基づいてスクリプトをデバッグします。
次の図は、さまざまなサンプラーのスクリプト設定を示しています。
[websocket リクエスト レスポンス サンプラー]
次の図は、スクリプトの [リクエスト] 情報を示しています。

次の図は、データ型として [テキスト] が選択されている場合のスクリプトの [レスポンス データ] を示しています。

[websocket シングル読み取りサンプラー]
次の図は、データ型として [テキスト] が選択されている場合のスクリプトの [レスポンス データ] を示しています。

4. スクリプトをエクスポートする
スクリプトをデバッグしたら、上部のナビゲーション バーで [ファイル] > [テスト計画に名前を付けて保存] を選択して、スクリプト ファイルをオンプレミス マシンに保存します。この例では、ファイルに wsTest.jmx という名前を付けます。
5. Apache JMeter ベースのパフォーマンス テスト シナリオを作成し、パフォーマンス テストを開始する
PTS コンソール にログインし、 を選択し、 をクリックします。パフォーマンステスト > シナリオの作成JMeter
シナリオを設定します。
シナリオ名を指定し、エクスポートした
wsTest.jmxファイルをアップロードします。スクリプト ファイルをアップロードすると、PTS は自動的にプラグインを補足します。補足に失敗した場合は、ファイルをアップロード
JMeterWebSocketSamplers-1.2.10.jarCSV
をクリックして、ダウンロードした JAR パッケージ()および 形式のパラメーター ファイルなどの他のデータ ファイルを追加します。
ストレス設定を設定します。
[最大 VU 数] パラメーターを
10に設定し、[テスト期間] パラメーターと [増加期間] パラメーターを2分に設定します。他のパラメーターはデフォルト値のままにします。パフォーマンステストには料金が発生します。ビジネス要件に基づいて負荷レベルを設定することをお勧めします。詳細については、「請求の概要」および「ストレステスト モデルとレベルを設定する」をご参照ください。
パフォーマンステストをデバッグして開始します。
推奨。シナリオをデバッグして設定を確認します。これは、パフォーマンステストの失敗を防ぐのに役立ちます。詳細については、「ストレステスト シナリオをデバッグする」をご参照ください。
[保存してテスト] をクリックします。[ヒント] ページで、[すぐにトリガー] と [テストが承認され、現地の法律に準拠していることを確認してください] を選択し、[ストレステストを開始] をクリックします。
PTS での Apache JMeter ベースのパフォーマンステストの詳細については、「JMeter シナリオを作成する」をご参照ください。
パフォーマンステスト結果を分析する
パフォーマンステストが完了すると、システムは自動的にパフォーマンステスト データを取得し、パフォーマンステスト レポートを生成します。パフォーマンステスト データには、パフォーマンステスト シナリオ メトリック、ビジネス詳細、監視詳細、API サンプリング ログが含まれます。詳細については、「JMeter パフォーマンステスト レポートを表示する」をご参照ください。