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

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

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

手順概要

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

手順詳細

すべてのJMeterサーバーで同じCSVファイルを利用する場合は、そのファイルを用意して共有ディスクに配置します。
JMeterサーバーごとに異なるCSVファイルを利用する場合は、サーバーごとにファイルを用意して共有ディスクに配置します。
ここでは、このそれぞれの方法を説明します。

すべてのJMeterサーバーで同じCSVファイルを利用する場合

  1. CSVファイルを用意する
    JMeterクライアントで、/mnt/jmuserdata 配下にテストデータとなるCSVファイルを作成します。
    クライアントおよびサーバーの /mnt/jmuserdata にはネットワークディスクがマウントされています。

    例) /mnt/jmuserdata/prefecture.csv

    code,prefecture
    01,Hokkaido
    02,Aomori
    03,Iwate
    04,Miyagi
    05,Akita
    06,Yamagata
    07,Fukushima
    08,Ibaraki
    09,Tochigi
    10,Gunma
    
  1. CSVファイルをJMeterサーバーのローカルディスクにコピーする
    ネットワークディスクのCSVファイルをそのまま利用することも可能ですが、ファイルアクセスが遅いためお奨めしません。
    そのため、JMeterサーバーのローカルディスクにCSVファイルをコピーします。
    1. JMeterを起動する
    2. Test Planに"setUp Thread Group"を追加する
      Add (追加) > Threads (Users) > setUp Thread Group
    3. setUp Thread Groupに"OS Process Sampler"を追加する
      Add (追加) > Sampler (サンプラー) > OS Process Sampler
      Copy CSV files
      • Name: Copy CSV files
      • Command: bash
      • Command parameters (Value)
        ( [ Add (追加) ] をクリックして以下の行を追加します)
        • -c
        • cp -f /mnt/jmuserdata/* /tmp
      • Check Return Code: チェックして、値は"0"

      上記の例では、/mnt/jmuserdataに作成したファイルをJMeterサーバーの/tmpにコピーしています。

    4. setUp Thread Groupに"View Results Tree"を追加する
      Add (追加) > Listener (リスナー) > View Results Tree (結果をツリーで表示)
    5. 実行することでCSVファイルをコピーする
      MENU > Run (実行) > Remote Start All (全て開始(リモート))
    6. 結果を確認する
      View Results Tree (結果をツリーで表示)でResponse codeが0であればコマンドは成功しています。
      View Reults Tree - Copy CSV files
      念のためJMeterサーバーにsshで接続してファイルがコピーされていることを確認してもよいでしょう。

      もし失敗する場合(Response codeが1)は、試しにローカル実行してResponse dataに出力されるエラー情報が参考になります。

    7. setUp Thread Groupを無効化する
      "setUp Thread Group"を右クリックし"Disable (無効)"を選択します。

    JMeterサーバーの数を増加した場合は、追加されたJMeterサーバーではこのコピー処理は実施されていないため、再度このコピーを実行する必要があります。

  1. CSV Data Set ConfigでCSVファイルを参照し設定する
    1. Test Planに"Thread Group"を追加する
      Add (追加) > Threads (Users) > Thread Group (スレッドグループ)
      "Loop Count (ループ回数)" を "3" などとしておく
    2. 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ファイルにヘッダ行がない場合は、列名をカンマ区切りで記入します。
  1. 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})
  1. リスナーを追加する
    動作確認のためにTest Planあるいは同じThread Groupに"View Results Tree"を追加します。
    Add (追加) > Listener (リスナー) > View Results Tree (結果をツリーで表示)
  1. テストを実施する
    メニューの Run (実行) > Remote Start All (全て開始(リモート))
  1. 結果を確認する
    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

JMeterサーバーごとに異なるCSVファイルを利用する場合

今回は、3台のJMeterサーバーでそれぞれ別々のCSVファイルを利用してリクエストをしてみます。
前述の同じCSVファイルを利用した設定から変更していきます。

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

    2. IPアドレスを名前とするディレクトリをJMeterサーバー分作成する

    3. 各ディレクトリにCSVファイルを作成する

      例)
      /mnt/jmuserdata/10.0.2.4/prefecture.csv

      code,prefecture
      01,Hokkaido
      02,Aomori
      03,Iwate
      04,Miyagi
      05,Akita
      06,Yamagata
      07,Fukushima
      08,Ibaraki
      09,Tochigi
      10,Gunma
      

      /mnt/jmuserdata/10.0.2.5/prefecture.csv

      code,prefecture
      11,Saitama
      12,Chiba
      13,Tokyo
      14,Kanagawa
      15,Niigata
      16,Toyama
      17,Ishikawa
      18,Fukui
      19,Yamanashi
      20,Nagano
      

      /mnt/jmuserdata/10.0.2.6/prefecture.csv

      code,prefecture
      21,Gifu
      22,Shizuoka
      23,Aichi
      24,Mie
      25,Shiga
      26,Kyoto
      27,Osaka
      28,Hyogo
      29,Nara
      30,Wakayama
      
  1. CSVファイルをJMeterサーバーのローカルディスクにコピーする
    1. 無効にしていた"setUp Tread Group"を有効化する
    2. 他の全てのThread Groupなどを無効化する
    3. "Copy CSV files"のCommand parameters Valueの2行目を以下に書き換える
      cp -f /mnt/jmuserdata/${__machineIP}/* /tmp
      Copy CSV Files
    4. 実行することでCSVファイルをコピーする
      MENU > Run (実行) > Remote Start All (全て開始(リモート))
    5. 結果を確認する
    6. 無効にしていたThread Groupなどを有効化し、"setUp Thread Group"を無効化する
  1. テストを実施する
    MENU > Run (実行) > Remote Start All (全て開始(リモート))
    ※ サンプラーやリスナーは変更不要です。
  1. 結果を確認する
    View Results TreeでいくつかのHTTP Requestを確認します。
    Sampler resultに出力されるIPアドレスとRequest > Request Bodyに出力されるQueryStringの組み合わせが、作成したCSVファイルとマッチしていることを確認してください。