Load Tester (multiple remote servers) Powered by Apache JMeter™でCSV Data Setを利用する (更新版)

Load Tester (multiple remote servers) Powered by Apache JMeter™でCSV Data Setを利用してファイルから値を読み取りそれをテストに利用する方法を説明します。

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
  9. 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
      
  10. JMeterサーバーを再起動する
    Azure PortalでJMeterサーバーの仮想マシンのスケールセットを再起動します。

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

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

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