JMeterを使用してテストシナリオを記録する方法

前書き

このチュートリアルでは、Apache JMeter HTTP(S)テストスクリプトレコーダーを設定して使用し、HTTPリクエストを記録する方法を説明します。 HTTPリクエストを記録することは、テスト計画を作成するための優れた方法であり、通常のユーザーの行動によく似たテストを作成するのに役立ちます。

このチュートリアルは、Apache JMeterの基本的な知識があることを前提としています。 JMeterを初めて使用する場合は、次のチュートリアルをご覧ください。https://www.digitalocean.com/community/tutorials/how-to-use-apache-jmeter-to-perform-load-testing-on -a-web-server [Apache JMeterを使用してWebサーバーで負荷テストを実行する方法]

前提条件

このチュートリアルに必要なソフトウェアのリストは次のとおりです。

  • Apache JMeter:http://jmeter.apache.org/download_jmeter.cgi [ここからバイナリをダウンロード]

  • Java 6以降:https://www.java.com/en/download/help/download_options.xml[Oracle Javaはこちらから入手可能]

  • Mozilla Firefox:http://www.mozilla.org/en-US/firefox/new/ [ここからダウンロード]

参考のため、このチュートリアルを作成する際に、次のソフトウェアバージョンを使用しました。

  • Oracle Java 7 Update 60、64ビット

  • Jメーター2.11

  • Firefox 30.0

テスト計画の構築を開始

まず、JMeterを起動します。 次に、テスト計画の構築を始めましょう。 開始するテスト計画がすでにある場合は、このセクションをスキップして、スレッドグループへのレコーディングコントローラーの追加に進みます(次のセクション)。

最小限、スレッドグループとHTTP要求のデフォルトを追加します。 スレッドグループを追加して始めましょう。

スレッドグループを追加する

テスト計画にスレッドグループを追加します。

  1. _Test Plan_を右クリックします

  2. _Add> _の上にマウスを置きます

  3. マウスを_Threads(Users)> _の上に置きます

  4. _Thread Group_をクリックします

スレッドグループプロパティを次の値で設定します。

  • スレッド数(ユーザー):これを* 50 *に設定します

  • ランプアップ期間(秒単位):これを* 10 *に設定します。

  • ループカウント:この設定は* 1 *のままにします。

image:https://assets.digitalocean.com/articles/jmeter/thread_group1.png [スレッドグループのプロパティ]

HTTPリクエストのデフォルトを追加する

次に、HTTP要求のデフォルトをスレッドグループに追加します。

  1. _Thread Group_を選択して右クリックします

  2. _Add> _の上にマウスを置きます

  3. _Config要素> _の上にマウスを置きます

  4. [HTTPリクエストのデフォルト]をクリックします

[HTTP要求のデフォルト]の[Webサーバー]セクションで、[サーバー名]フィールドまたは[IP_]フィールドに、テストするWebサーバーの名前またはIPアドレスを入力します。

image:https://assets.digitalocean.com/articles/jmeter/http_request_defaults.png [HTTPリクエストのデフォルト]

WebサーバーがCookieを使用している場合、HTTP Cookie Managerをスレッドグループに追加することで、Cookieのサポートを追加できます。

  1. _Thread Group_を選択して右クリックします

  2. _Add> _の上にマウスを置きます

  3. _Config要素> _の上にマウスを置きます

  4. [HTTP Cookie Manager]をクリックします

録音コントローラーを追加する

それでは、録音コントローラーをスレッドグループに追加しましょう。

  1. _Thread Group_を選択して右クリックします

  2. _Add> _の上にマウスを置きます

  3. _Logic Controller> _の上にマウスを置きます

  4. _Recording Controller_をクリックします

記録コントローラーは、記録されたHTTP要求サンプラーが作成される場所です。 次のステップは、HTTP(S)Test Script Recorderをセットアップすることです。

HTTP(S)テストスクリプトレコーダーの追加

次に、WorkBenchにHTTP(S)テストスクリプトレコーダーを追加しましょう。

  1. _WorkBench_を選択して右クリックします

  2. _Add> _の上にマウスを置きます

  3. マウスを_Non-Test Elements> _の上に置きます

  4. HTTPS)をクリックします。テストスクリプトレコーダー

注意: WorkBenchに追加されたアイテムは、残りのテスト計画と共に保存されません。 WorkBenchを保存する場合は、WorkBench_を右クリックし、[_選択を名前を付けて保存…]をクリックして、目的の場所に保存します。 保存した後、「マージ」メニュー項目を使用して、保存したWorkBenchを選択することで、開いているテスト計画に追加できます。

ポート設定

HTTP(S)Test Script Recorderプロキシが実行されるデフォルトのポートは `+ 8080 +`です。 これは、グローバル設定の下の「+ポート」設定を変更することで変更できます。

URLパターンの包含または除外(オプション)

HTTP(S)Script Recorderでは、正規表現として記述されたURLパターンを追加して、記録時に含めるか除外することができます。 これは、リクエストするタイプのコンテンツのみを含めるのに役立ちます(例: * .html、。phpなど)またはリクエストしたくないコンテンツのタイプを除外する(例: * .jpg、。png、*。jsなど)。

URLパターンを追加するには、[_ URLパターンを含める_]または[除外するURLパターン]セクションの下の[追加]ボタンをクリックし、セクションの白い領域の上部をクリックします。 これで、パターンを入力できるはずです。 このプロセスを繰り返して、さらにパターンを追加します。

例:WebページのURLパターン

.*\.html
.*\.php
.*\.htm

例:画像のURLパターン

.*\.png
.*\.jpg
.*\.gif

画像を除外するために除外するURLパターンのスクリーンショットを次に示します。

image:https://assets.digitalocean.com/articles/jmeter/exclude_images.png [画像を除外するURLパターン]

スクリプトレコーダーへのアイテムの追加(オプション)

JMeterアイテムをHTTP(S)Test Script Recorderに追加すると、記録されたリクエストは追加されたアイテムを継承します。 たとえば、_Timer_アイテムをスクリプトレコーダに追加すると、記録される各HTTP要求にタイマーが追加されます。 テストが実行されると、タイマーにより、各テストスレッドがHTTPリクエストを実行する前に待機します。

例として、Constant TimerをHTTP(S)Test Script Recorderに追加しましょう。

  1. HTTP(S)Test Script Recorderを選択し、右クリックします

  2. _Add> _の上にマウスを置きます

  3. _Timers> _の上にマウスを置きます

  4. _Constant Timer_をクリックします

スレッド遅延を任意に設定できます。

image:https://assets.digitalocean.com/articles/jmeter/constant_timer.png [定数タイマー]

ユーザーが2秒ごとに異なるページをクリックすることをシミュレートするとします。 スレッド遅延を2000ミリ秒に設定すると、記録される各HTTP要求に2秒の遅延が追加され、これが達成されます。

これは、スクリプトレコーダーに項目を追加して、希望するテストを実行するテスト計画を作成する方法の一例にすぎません。

録音開始

スクリプトレコーダーウィンドウの下部にある[開始]ボタンをクリックすると、ブラウザのリクエストをインターセプトおよび記録するために使用されるJMeterプロキシサーバーが起動します。 (レコーダーの)[スタート]ボタンをクリックします。

レコーダーを初めて実行しようとすると、証明書が存在しないため開始できないというエラーが表示されます。 [OK]をクリックしてから、[開始]を2回クリックします。 _ApacheJMeterTemporaryRootCA.crt_という名前の一時証明書がJMeter binディレクトリに作成されたことを示すメッセージが表示されます。 [OK]をクリックして続行します。

image:https://assets.digitalocean.com/articles/jmeter/temp_cert.png [作成された一時証明書]

*注意:*ブラウザがすでにプロキシを使用している場合、コマンドラインオプション-Hおよび-Pを使用して、JMeterを起動する前にそのプロキシを使用するようにJMeterを設定する必要があります。

JMeterプロキシを使用するためのFirefoxの構成

JMeter HTTP(S)Test Script Recorderを使用する場合、ブラウザーとしてFirefoxを使用します。Chromeや他のブラウザーとは異なり、プロキシ設定のシステム全体の構成をオーバーライドできるためです。

次の手順に従って、すべてのトラフィックのプロキシとしてポート8080でlocalhost(127.0.0.1)を使用するようにFirefoxを構成します。

  1. Firefoxを開く

  2. [設定]メニューに移動します

  3. [詳細設定]タブをクリックします

  4. 次に[ネットワーク]タブ

  5. 「接続」セクションで、「設定…​」をクリックします

  6. 「手動プロキシ設定」ラジオボタンを選択します

  7. HTTPプロキシを「localhost」に設定し、ポートを「8080」に設定します

  8. 「すべてのプロトコルにこのプロキシサーバーを使用する」をチェックします

  9. [OK]をクリックして、[設定]メニューを終了します

注: JMeterのスクリプトレコーダーをプロキシとして使用するようにFirefoxを構成すると、スクリプトレコーダーが実行されている場合にのみ正しく動作します。

HTTPリクエストの記録

テスト計画のHTTP(S)Test Script Recorderが実行され、Firefoxがプロキシとして使用するように構成されたので、Firefoxが送信するHTTP要求が記録されます。 テストしてみましょう。

Firefoxで、サーバーのホームページ(JMeter HTTPリクエストのデフォルトで設定したのと同じサーバー)にアクセスします。

http://your_domain.com/

これで、録音コントローラーの横に小さな三角形が表示されます。 クリックして展開し、記録したリクエストを表示します。 含めたURLパターンと除外したURLパターンに応じて、記録されたHTTPリクエストが表示されます。 サイトを閲覧して、さらにリクエストを記録してください。

WordPressサイトのホームページにアクセスしたときに記録されたものの例を次に示します(URLパターンが設定されていない場合)。

image:https://assets.digitalocean.com/articles/jmeter/no_patterns.png [記録されたHTTPリクエスト]

ご覧のとおり、多くのリクエストが作成されました。 ここで不要なエントリを削除するだけで、HTTP要求のリストを改良できます。

レコーディングコントローラーの下にエントリが表示されない場合は、HTTP(S)テストスクリプトレコーダーでURLパターンを確認します(ヒント:すべてを記録するために、すべてのインクルードとエクスクルードを削除します)。

記録が完了したら、HTTP(S)Test Script Recorderウィンドウの下部にある[停止]ボタンをクリックします。 Firefoxは(ポート8080をプロキシとして使用するように構成されているため)ページにアクセスできなくなります。正常に機能する場合は、「プロキシなし」を使用するように構成します。

テスト計画を実行する

記録したテスト計画に満足したら、保存してから実行します。 手動で作成されたテストとまったく同じように機能するため、設定、削除、およびアイテムを追加して、目的のテストケースにより厳密に一致させることができます。

結論

HTTP(S)テストスクリプトレコーダーを使用してJMeterテスト計画の作成を支援できるようになったので、現実的なシナリオを模倣したテスト計画を簡単に作成できます。 Recording Controllerに記録されたリクエストを自由に調べて、ユーザーがWebサーバーをブラウザするときに行われるリクエストの種類について詳しく学習してください。

がんばろう!