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をご利用の場合は、以前のバージョン用のコンテンツをご覧ください。
手順概要
- 共有ディスク上のファイルとJMeterサーバーのローカルディスクの同期設定をする
- CSVファイルを用意する
- JMeterサーバーを再起動する
- CSV Data Set ConfigでCSVファイルを参照し設定する
- サンプラーでそのパラメーターを利用する
- リスナーを追加する
- テストを実施する
- 結果を確認する
手順詳細
-
共有ディスク上のファイルと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 )が作成されます。
-
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
-
JMeterサーバーを再起動する
JMeterサーバーではその起動時に、先の設定に従って/mnt/jmuserdata内のファイルがローカルディスクに同期されます。
Azure PortalでJMeterサーバーの仮想マシンのスケールセットを再起動します。
JMeterサーバーの仮想マシンのスケールセットは、Load Testerの導入時にJMeter ServersのVirtual machine scale set nameとして指定した名前で作られています。
これにより、すべてのJMeterサーバーが一括で再起動され、CSVデータファイルが同期されます。 -
CSV Data Set ConfigでCSVファイルを参照し設定する
- JMeterを起動する
- Test Planに"Thread Group"を追加する
Add (追加) > Threads (Users) > Thread Group (スレッドグループ)
“Loop Count (ループ回数)” を “3” などとしておく - Test PlanあるいはThread Groupに “CSV Data Set Config” を追加する
Add (追加) > Config Element (設定エレメント) > CSV Data Set Config
- Configure the CSV Data Source
- Filename: 先に作成したCSVファイル名
- Variable Names (comma-delimited): CSVファイルにヘッダ行がない場合は、列名をカンマ区切りで記入します。
- Configure the CSV Data Source
-
Samplerでそのパラメーターを利用する
今回はCSVファイルのデータをHTTP RequestサンプラーでGETリクエストのQueryStringとして渡すこととします。
CSVファイル内の値は、"${列名}" とすることで渡されます。Thread GroupにHTTP Requestサンプラーを追加する
Add (追加) > Sampler (サンプラー) > HTTP Request (HTTP リクエスト)- Web Server
- Protocol [http]: プロトコル (http or https)
- Server Name or IP: サーバー名あるいはIPアドレス
- HTTP Request
- (Method) GET
- Parameters
[Add] をクリックし、パラメーターを追加する- Name: パラメーター名 (例: prefecture)
- Value: パラメーター値 (例: ${prefecture})
- Web Server
-
リスナーを追加する
動作確認のためにTest Planあるいは同じThread Groupに"View Results Tree"を追加します。
Add (追加)\ > Listener (リスナー) > View Results Tree (結果をツリーで表示) -
テストを実施する
メニューの Run (実行) > Remote Start All (全て開始(リモート)) -
結果を確認する
View Results TreeでいくつかのHTTP Requestを確認します。 -
CSVファイルを用意する
-
各JMeterサーバーのIPアドレスを確認する CSVファイルのファイル名にJMeterサーバーのIPアドレスを含めることで、JMeterサーバーが利用するCSVファイルを判断できるようにします。
JMeterのメニュー > Run (実行) > Remote Start (開始(リモート)) を開き、そこに表示されるIPアドレスの一覧をメモします。(ポート番号は不要です)
-
各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
-
-
JMeterサーバーを再起動する
Azure PortalでJMeterサーバーの仮想マシンのスケールセットを再起動します。 -
CSV Data Set ConfigでJMeterサーバー自身のIPアドレスが名前に含まれているCSVファイルを参照する
-
テストを実施する
メニューの Run (実行) > Remote Start All (全て開始(リモート))
※ サンプラーやリスナーは変更不要です。 -
結果を確認する
View Results TreeでいくつかのHTTP Requestを確認します。
Sampler resultに出力されるIPアドレスとRequest > Request Bodyに出力されるQueryStringの組み合わせが、作成したCSVファイルとマッチしていることを確認してください。