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では、この記事で紹介する方法よりも簡単にリモートのJMeterサーバーへのテストデータファイルの配布をできるようになっています。 その手順はこちらの記事をご覧ください。

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
    
  2. 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サーバーではこのコピー処理は実施されていないため、再度このコピーを実行する必要があります。

  3. 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ファイルにヘッダ行がない場合は、列名をカンマ区切りで記入します。
  4. 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})
  5. リスナーを追加する
    動作確認のためにTest Planあるいは同じThread Groupに"View Results Tree"を追加します。
    Add (追加) > Listener (リスナー) > View Results Tree (結果をツリーで表示)

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

  7. 結果を確認する
    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
      
  2. 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 (全て開始(リモート))
    ※ サンプラーやリスナーは変更不要です。

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