Load Tester (multiple remote servers) Powered by Apache JMeter™は、Apache JMeter™をMicrosoft Azure上の複数のサーバーで稼働させ、大規模な負荷テストができるものです。

JMeterではリクエストごとに異なるパラメーター値を渡したい場合、CSVファイルにその値を用意しておくことができます。

JMeterのリモートテストを実施する場合、このCSVファイルをすべてのJMeterサーバーに配布する必要があります。
ここでは、その方法を説明します。

2021/01/20以降にデプロイしたLoad Testerでこのコンテンツの手順に対応しています。
それより前のLoad Testerをご利用の場合は、以前のバージョン用のコンテンツをご覧ください。

手順概要

  1. 共有ディスク上のファイルとJMeterサーバーのローカルディスクの同期設定をする
  2. CSVファイルを用意する
  3. JMeterサーバーを再起動する
  4. CSV Data Set ConfigでCSVファイルを参照し設定する
  5. サンプラーでそのパラメーターを利用する
  6. リスナーを追加する
  7. テストを実施する
  8. 結果を確認する

手順詳細

  1. 共有ディスク上のファイルとJMeterサーバーのローカルディスクの同期設定をする
    /mnt/jmuserdata/sync.to ファイルに設定されたディレクトリに対して、共有ディスクである /mnt/jmuserdata 内のファイルおよびディレクトリがJMeterサーバーに同期されます。
    JMeterクライアントで /mnt/jmuserdata/sync.to ファイルを編集します。

    例) /mnt/jmuserdata/sync.to

    /mnt/resources/jmuserdata
    

    これによりJMeterクライアントには、シンボリックリンク(この例では /mnt/resources/jmuserdata -> /mnt/jmuserdata )が作成されます。

  2. CSVファイルを用意する
    JMeterクライアントで、作成されたシンボリックリンクのディレクトリ(/mnt/resources/jmuserdata)配下に、テストデータとなるCSVファイルを作成します。

    例) /mnt/resources/jmuserdata/chemicalelements.csv

    atomic_number,symbol,element
    1,H,Hydrogen
    2,He,Helium
    3,Li,Lithium
    4,Be,Beryllium
    5,B,Boron
    6,C,Carbon
    7,N,Nitrogen
    8,O,Oxygen
    9,F,Fluorine
    10,Ne,Neon
    
  3. JMeterサーバーを再起動する
    JMeterサーバーではその起動時に、先の設定に従って/mnt/jmuserdata内のファイルがローカルディスクに同期されます。
    Azure PortalでJMeterサーバーの仮想マシンのスケールセットを再起動します。
    JMeterサーバーの仮想マシンのスケールセットは、Load Testerの導入時にJMeter ServersのVirtual machine scale set nameとして指定した名前で作られています。
    JMeterサーバー再起動
    これにより、すべてのJMeterサーバーが一括で再起動され、CSVデータファイルが同期されます。

  4. CSV Data Set ConfigでCSVファイルを参照し設定する

    1. JMeterを起動する
    2. Test Planに"Thread Group"を追加する
      Add (追加) > Threads (Users) > Thread Group (スレッドグループ)
      "Loop Count (ループ回数)" を "3" などとしておく
    3. Test PlanあるいはThread Groupに "CSV Data Set Config" を追加する
      Add (追加) > Config Element (設定エレメント) > CSV Data Set Config
      CSV Data Set Config
      • Configure the CSV Data Source
        • Filename: 先に作成したCSVファイル名
        • Variable Names (comma-delimited): CSVファイルにヘッダ行がない場合は、列名をカンマ区切りで記入します。
  5. Samplerでそのパラメーターを利用する
    今回はCSVファイルのデータをHTTP RequestサンプラーでGETリクエストのQueryStringとして渡すこととします。
    CSVファイル内の値は、"${列名}" とすることで渡されます。

    Thread GroupにHTTP Requestサンプラーを追加する
    Add (追加) > Sampler (サンプラー) > HTTP Request (HTTP リクエスト)
    HTTP Request

    • Web Server
      • Protocol [http]: プロトコル (http or https)
      • Server Name or IP: サーバー名あるいはIPアドレス
    • HTTP Request
      • (Method) GET
    • Parameters
      [Add] をクリックし、パラメーターを追加する
      • Name: パラメーター名 (例: prefecture)
      • Value: パラメーター値 (例: ${prefecture})
  6. リスナーを追加する
    動作確認のためにTest Planあるいは同じThread Groupに"View Results Tree"を追加します。
    Add (追加)\ > Listener (リスナー) > View Results Tree (結果をツリーで表示)

  7. テストを実施する
    メニューの Run (実行) > Remote Start All (全て開始(リモート))

  8. 結果を確認する
    View Results TreeでいくつかのHTTP Requestを確認します。

    • Sampler result タブ
      Thread Nameにアクセス元となったJMeter ServerのIPアドレスが表示されています。
      View Results Tree > Sampler result
    • Request > Request Body タブ
      urlのQueryStringにCSVファイルの値が指定されています。
      View Results Tree > Request > Request Body
  1. CSVファイルを用意する

    1. 各JMeterサーバーのIPアドレスを確認する
      CSVファイルのファイル名にJMeterサーバーのIPアドレスを含めることで、JMeterサーバーが利用するCSVファイルを判断できるようにします。
      JMeterのメニュー > Run (実行) > Remote Start (開始(リモート)) を開き、そこに表示されるIPアドレスの一覧をメモします。(ポート番号は不要です)
      Remote servers

    2. 各IPアドレスを名前とするCSVファイルを作成する
      例)
      /mnt/resources/jmuserdata/10.0.2.4.csv

      atomic_number,symbol,element
      1,H,Hydrogen
      2,He,Helium
      3,Li,Lithium
      4,Be,Beryllium
      5,B,Boron
      6,C,Carbon
      7,N,Nitrogen
      8,O,Oxygen
      9,F,Fluorine
      10,Ne,Neon
      

      /mnt/resources/jmuserdata/10.0.2.5.csv

      atomic_number,symbol,element
      11,Na,Sodium
      12,Mg,Magnesium
      13,Al,Aluminium
      14,Si,Silicon
      15,P,Phosphorus
      16,S,Sulfur
      17,Cl,Chlorine
      18,Ar,Argon
      19,K,Potassium
      20,Ca,Calcium
      

      /mnt/resources/jmuserdata/10.0.2.6.csv

      atomic_number,symbol,element
      21,Sc,Scandium
      22,Ti,Titanium
      23,V,Vanadium
      24,Cr,Chromium
      25,Mn,Manganese
      26,Fe,Iron
      27,Co,Cobalt
      28,Ni,Nickel
      29,Cu,Copper
      30,Zn,Zinc
      
  2. JMeterサーバーを再起動する
    Azure PortalでJMeterサーバーの仮想マシンのスケールセットを再起動します。

  3. CSV Data Set ConfigでJMeterサーバー自身のIPアドレスが名前に含まれているCSVファイルを参照する

    1. "CSV Data Set Config" のFilenameに、IPアドレス部分を "${__machineIP}" と置き換えたファイル名を記入します。
      例: /mnt/resources/jmuserdata/${__machineIP}.csv
      CSV Data Set Config
  4. テストを実施する
    メニューの Run (実行) > Remote Start All (全て開始(リモート))
    ※ サンプラーやリスナーは変更不要です。

  5. 結果を確認する
    View Results TreeでいくつかのHTTP Requestを確認します。
    Sampler resultに出力されるIPアドレスとRequest > Request Bodyに出力されるQueryStringの組み合わせが、作成したCSVファイルとマッチしていることを確認してください。