すべてのプロダクト
Search
ドキュメントセンター

Performance Testing:PTS で JMeter を使用した WebSocket の負荷テスト

最終更新日:Mar 12, 2026

Performance Testing (PTS) は Apache JMeter スクリプトを実行して負荷テストを実施します。本ガイドでは、WebSocket 接続をテストする JMeter スクリプトを作成し、そのスクリプトを PTS で実行する手順を説明します。全体を通して JMeter WebSocket Samplers プラグインを使用します。

WebSocket テストと HTTP の違い: HTTP のリクエスト - 応答サイクルとは異なり、WebSocket 接続は永続的かつ全二重です。1 つのリクエストが複数の応答を生成する可能性があり、JMeter はそれらを到着順にキューに格納します。各読み取りサンプラーはこのキューの先頭から次の応答を取り出し、新たに受信した応答はキューの末尾に追加されます。読み取りサンプラーと書き込みサンプラーの数が一致しない場合、応答の順序がずれる可能性があります。テストスクリプトを設計する際は、この動作を考慮してください。

前提条件

  • ローカルマシンに Apache JMeter がインストールされていること

  • テスト対象の WebSocket サービスエンドポイントがあること

ワークフロー概要

エンドツーエンドのワークフローは以下の 5 ステップで構成されます。

  1. JMeter WebSocket Samplers プラグインをインストールします。

  2. WebSocket サンプラーを使用してテストスクリプトを作成します。

  3. スクリプトをローカルでデバッグします。

  4. スクリプトを .jmx ファイルとしてエクスポートします。

  5. スクリプトを PTS にアップロードして負荷テストを実行します。

ステップ 1:JMeter WebSocket Samplers プラグインのインストール

  1. JMeter WebSocket Samplers プラグインの最新バージョンをダウンロードします。以下の手順では、例として JMeterWebSocketSamplers-1.2.10.jar を使用します。

  2. ダウンロードした JAR ファイルを <Apache JMeter installation directory>/lib/ext ディレクトリにコピーします。

    重要

    この JAR ファイルのコピーを保存しておいてください。後ほど PTS にアップロードする必要があります。

  3. Apache JMeter を再起動します。

  4. 以下の要素が存在することを確認して、インストールを検証します。

    場所期待される要素
    Test Plan > Add > Config ElementWebSocket Binary Frame FilterWebSocket Ping/Pong Frame FilterWebSocket Text Frame Filter
    Test Plan > Add > AssertionsBinary Response Assertion
    Test Plan > Add > Listener > View Results Tree > Text ドロップダウンBinary オプション
    Thread Group > Add > Sampler以下の表に示す WebSocket サンプラー

ステップ 2:テストスクリプトの作成

以下の例では、基本的な WebSocket テストスクリプトを紹介します。ご利用のテストケースに合わせてサンプラーを調整してください。

サンプラーリファレンス

サンプラー目的ブロッキング動作
WebSocket Open Connectionサーバーへの WebSocket 接続を開きます接続が確立されるかタイムアウトするまでブロックします
WebSocket Ping/PongPING フレームを送信し、PONG フレームを待ちますPONG を受信するかタイムアウトするまでブロックします
WebSocket request-response Samplerフレームを送信し、1 つの応答を読み取ります応答が読み取られるかタイムアウトするまでブロックします
WebSocket Single Write Sampler応答を待たずにフレームを送信しますノンブロッキング
WebSocket Single Read Samplerキューから 1 つの応答を読み取ります応答が読み取られるかタイムアウトするまでブロックします
WebSocket Closeネゴシエーションを通じて接続を閉じますクローズハンドシェイクが完了するまでブロックします

プロキシサービス、データフィルタリング、データシャーディング用のサンプラーについては、JMeter WebSocket Samplers ドキュメントをご参照ください。

スクリプトの構築

  1. Test Plan を右クリックし、Add > Threads (Users) > Thread Group を選択します。

  2. スレッドグループに以下のサンプラーを順番に追加します。Thread Group を右クリックし、Add > Sampler > *サンプラー名* をそれぞれ選択してください。

a. WebSocket Open Connection

Server URL セクションを設定して、テスト対象のサービスを指定します。

WebSocket Open Connection configuration
説明

この例では、受信したすべてのメッセージをエコーする Python Echo サービスを対象としています。サンプルサーバーコードは以下のとおりです。

Example server.py code

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        message = "Your message: {}".format(message)
        await websocket.send(message)

asyncio.get_event_loop().run_until_complete(websockets.serve(echo, '0.0.0.0', 8080))
asyncio.get_event_loop().run_forever()

b. WebSocket Ping/Pong

Pong (read) timeout (ms)6000 に設定します。JMeter が 6,000 ms 以内に PONG フレームを受信しない場合、サンプラーは失敗し、既存の接続を再利用します。

WebSocket Ping/Pong configuration

c. WebSocket request-response Sampler

このサンプラーは、フレームを送信して応答を読み取る処理を 1 ステップで実行します。

パラメーター説明
Connectionuse existing connection以前に開いた接続を再利用します。
Data typeTextフレームのデータの型。
Request dataPTS送信するペイロード。
Response (read) timeout (ms)6000応答を待つ最大時間。
WebSocket request-response Sampler configuration

d. WebSocket Single Write Sampler

このサンプラーはフレームを送信し、応答を待たずに即座に返します。

パラメーター説明
Connectionuse existing connection以前に開いた接続を再利用します。
Data typeTextフレームのデータの型。
Request dataPTS bang bang bang送信するペイロード。
WebSocket Single Write Sampler configuration

e. WebSocket Single Read Sampler

このサンプラーは、何かを送信せずにキューから次の応答を読み取ります。

パラメーター説明
Connectionuse existing connection以前に開いた接続を再利用します。
Data typeTextフレームのデータの型。
Response (read) timeout (ms)6000応答を待つ最大時間。
WebSocket Single Read Sampler configuration

f. WebSocket Close

標準的なクローズハンドシェイクを通じて WebSocket 接続を閉じます。正常にクローズされた場合、1000:sampler requested close が返されます。

パラメーター説明
Close status1000クローズフレームで送信されるステータスコード(データフレームの最初の 2 バイト)。
Response (read) timeout (ms)6000クローズの応答を待つ最大時間。
WebSocket Close configuration

(オプション)HTTP ヘッダーの追加

認証トークンなどのヘッダーを含めるには、Thread Group を右クリックし、Add > Config Element > HTTP Header Manager を選択します。詳細については、Apache JMeter Header Manager ドキュメントをご参照ください。

リスナーの追加

デバッグ中にリクエストおよび応答データを確認するには、Thread Group を右クリックし、Add > Listener > View Results Tree を選択します。

ステップ 3:スクリプトのデバッグ

  1. JMeter ツールバーの Start ボタンをクリックしてスクリプトを実行します。

  2. View Results Tree リスナーを開きます。サンプラーの横に緑色のチェックマークが表示されている場合は成功、赤いアイコンの場合は失敗を示します。

  3. 失敗したサンプラーがある場合は、リクエストおよび応答データを確認して問題を特定します。以下のスクリーンショットは成功時の結果を示しています。WebSocket request-response Sampler -- Request data: WebSocket request-response Sampler -- Response data (Text): WebSocket Single Read Sampler -- Response data (Text):

    Request data

    Response data

    Single Read response

ステップ 4:スクリプトのエクスポート

デバッグ後、File > Save Test Plan as を選択してスクリプトを保存します。以下の例ではファイル名として wsTest.jmx を使用しています。

ステップ 5:PTS での負荷テストの実行

スクリプトのアップロード

  1. PTS コンソールにログインします。Performance Test > Create Scenario を選択し、JMeter をクリックします。

  2. シナリオ名を入力し、wsTest.jmx ファイルをアップロードします。

  3. PTS はプラグインの依存関係を自動的に解決します。自動解決に失敗した場合は、Upload File をクリックして、JMeterWebSocketSamplers-1.2.10.jar ファイルおよび CSV パラメーターファイルなどのデータファイルを手動でアップロードします。

    Scenario configuration

負荷設定の構成

初期テスト実行のために以下のパラメーターを設定します。テスト要件に応じて値を調整してください。

パラメーター説明
Max VUs10同時実行する仮想ユーザー (VU) の最大数。
Test Duration2 minutes負荷テストの合計持続時間。
Increment Duration2 minutes最大 VU 数まで増加させるための時間。

その他のパラメーターはデフォルト値のままにしてください。

Load settings
重要

負荷テストは課金対象です。実際の要件に基づいて負荷レベルを設定してください。料金については、「課金概要」をご参照ください。負荷モデルの詳細については、「ストレステストモデルおよびレベルの設定」をご参照ください。

負荷テストの開始

  1. (推奨)フルテストを実行する前に、シナリオをデバッグして構成を検証してください。詳細については、「ストレステストシナリオのデバッグ」をご参照ください。

  2. Save and Test をクリックします。Tips ページで、Trigger Now および Make sure that the test is approved and complies with local laws を選択し、Start Stress Testing をクリックします。

テスト結果の分析

負荷テストが完了すると、PTS は自動的に以下の情報を含むパフォーマンスレポートを生成します。

  • シナリオレベルのメトリック

  • API ごとのビジネス詳細

  • モニタリング詳細

  • API サンプリングログ

詳細については、「JMeter パフォーマンステストレポートの表示」をご参照ください。

次のステップ