JMeter CSVファイルを読み込み値を参照する

JMeterで複数アカウントでログインさせたり、GETやPOSTのパラメータを渡したシナリオを登録・実行をしていると、HTTPサンプラーの登録が手間だと感じてくるようになります。

 

というのも、多くの案件において、スケジュールの短縮策として負荷テストと平行して結合テストやバグ対応を並行して行うことが多いことから、データの初期化やパラメータの変更などにより、HTTPサンプラーに登録しているパラメータを直さなければならないことがあるためです。

 

そんな苦労を知ってか知らずか、JMeterは外部ファイルを読み込むことができるため、変更がありそうな値を別ファイルで管理することが可能です。

 

どんなファイルでも扱えるのですが、CSVであればGUIでの設定も可能なのでとっつきやすいと思いますので、本日はJMeterでCSVを読み込む方法を紹介したいと思います。

 

CSVを読み込む方法

JMeterには外部に配置したCSVファイルを参照する方法が2つあります。

  • __CSVRead関数を利用する
  • CSV DATA Set Configを利用する(GUI)

 

CSVを読み込むだけなら、どちらも同じことができます。

 

僕の場合、単純なものや設定画面に直接記述したい場合は__CSVRead関数を、また複雑なもの(複数のパラメータを管理する、など)は、CSV DATA Set Configを使うようにしています。

 

__CSVRead関数を利用したCSV読み込み

それではまず、__CSVRead関数で実施する方法を紹介していきます。

 

CSVファイルの準備

今回はわかりやすくするために、テストサイトであるpenguinweb.netの全ページのURLをCSVで管理し、読み込んで見ます。

 

CSVなので、penguinweb.netのサイトマップからドメイン以下を部分をカンマ区切りで作成します。

 

/,/1.html,/8.html,/14.html,/20.html,/33.html,/35.html,/50.html,/52.html,/57.html,/69.html,/97.html,/100.html,/113.html,/141.html,/167.html,/182.html,/186.html,/197.html,/207.html,/200.html,/213.html,/229.html,/233.html,/category/tawawa,/category/test,/category/php,/category/wordpress,/contact,/sitemap,/list,/contact-finish

 

作成したらファイル名を指定して保存し、JMeterの実行ファイルと同じ階層に格納します。

(ファイル名はなんでもOKですが、ここではurl.csvとしています)

 

これでCSVの準備は完了です。

 

JMeterの設定方法

続いて、CSV読み込み方法について見ていきます。

 

今回はテストなので、1ページに1回アクセスする設定とします。

  • スレッド数:1
  • Ramp-up:10
  • ループ回数:1

JMeter CSV読み込み用 スレッドの設定画面

 

次にHTTPサンプラーです。

Webサーバには検証サイトであるpenguinweb.netの情報を入力し、パスの部分にCSVを参照する関数を利用して、

 

${__CSVRead(url.csv,0)}

 

と入力します。

JMeter CSV読み込み用 HTTPサンプラーの設定画面

__CSVRead関数については以下で説明します。

 

__CSVRead関数について

JMeterには、初期で外部からCSVを参照する__CSVRead関数というものが用意されており、引数は以下のとおりです。

 

${__CSVRead(【CSVのパス・ファイル名】,【CSVのカラム】)}

 

1つ目の引数にはcsvファイルのパスとファイル名を指定します。

今回は、JMeterのbinディレクトリ配下にCSVファイルを格納したのでファイル名のみでOKですが、それだと都合が悪い場合は絶対パスで指定すれば参照してくれます。

 

2つ目の引数は、CSVファイル内の取得したいカラム番号を指定します。

ここではCSVの一番最初のカラムを指定しています。
(なお、先頭が0になるので、注意しましょう)

 

ただ、このまま実行しても一番最初の値以外が読み込めるのがわからないので、比較用にもう一つHTTPサンプラーを作ります。

 

ここではCSVの2番目のカラムを指定して

 

${__CSVRead(url.csv,1)}

 

としています。

JMeter CSV読み込み用 HTTPサンプラーの設定画面2

 

これで設定は完了なので、リスナーから「結果をツリーで表示」を作成して実行させます。

 

「結果をツリーで表示」からリクエストタブを選択すると、どのURLに対して実行たのかを確認できます。

下の画面キャプチャの通り、ちゃんとCSVの一番最初のURLが実行されています。

JMeter CSV読み込み用 結果をツリーで表示 リクエストタブ

 

その下の実行結果では、CSVの2番めのURLが実行されていますね。

JMeter CSV読み込み用 結果をツリーで表示 リクエストタブ2

 

なお「結果を表で表示」だと以下のとおり正しく処理されていそうでが、これではどのURLかわかりませんので、「結果をツリーで表示」で確認しましょう。

JMeter CSV読み込み用 結果を表で表示

 

これで外部のCSVファイルを読み込み、正しく実行されていることが確認できました。

 

この対応がなされれば、最初にHTTPサンプラーをページの数だけ作る手間はあるものの、変更が入ってもCSVを修正すればOKになります。

 

CSV DATA Set Configを利用したCSV読み込み

次に、CSV DATA Set ConfigでCSVを読み込んでみます。
こちらはGUIで、GETやPOSTなどパラメータを渡す場合にも使えるので、こちらのほうが利用頻度は高いかもしれません。

 

CSVの準備

こちらもCSVを準備するのですが、1点注意が必要です。

 

CSV DATA Set Configの場合は、1行ごとに読み込まれるのでカンマ区切りではなく改行で準備します。
こちらもJMeterの実行ファイルと同じ場所に格納します(ファイル名は「url2.csv」としています)

JMeter CSV DATA Set ConfigのCSV

この「カンマ区切りではなく改行」で準備した理由については、最後に紹介します。

(僕も知らなくて最初ハマりました。。。。)

 

JMeterの設定方法

では、JMeterでの設定方法について説明していきます。

スレッドグループの設定は、__CSVRead関数の説明と同様に早く完了する値にしています。

 

画面左メニューの「追加」から「設定エレメント」より「CSV DATA Set Config」をクリックします。

JMeter CSV DATA Set Configの設定1

 

ここでは以下の画面キャプチャの値を入力しています。

JMeter CSV DATA Set Config 設定項目の説明

CSV DATA Set Configの設定項目については以下のとおりです。

  • Filename : ファイル名を指定します。(必須)
  • File encording : ファイルのエンコードを指定します。
  • Variable Names : 変数名の指定をします。ここでは(必須)
  • Delimiter : デリミタ(区切り文字)を指定します。ここでは(必須)
  • Allow quoted data? : CSVの値をダブルォーテーションで囲っている場合はTRUEにする
  • Recycle on EOF? : CSVデータを最後まで読み込んだら最初の行に戻るかどうか
  • Stop thread on OEF? : CSVデータを最後まで読み込んだら実行を終了するか
  • Sharing mode : 対象範囲の指定。All threadsはすべてのスレッドが対象、Current thread groupはスレッドグループ内、Current threadはスレッド単位。

 

次にHTTPサンプラのパスの箇所に${path}と入力します。

JMeter CSV DATA Set Config HTTPサンプラーのパスの変数

 

これで設定は完了です。

 

実行して「結果をツリーで表示」のリクエストタブを確認します。

JMeter CSV DATA Set Configの結果確認1JMeter CSV DATA Set Configの結果確認2

 

CSVのURLが指定通り実行されていることが確認できました。

 

CSV DATA Set Configについて

GUIなので特に難しそうなところはないと思いますが、1点ハマりポイントがありますので、そちらを紹介します。

 

ハマりポイントとは、先ほどCSVファイルを改行で指定した箇所のことです。

 

CSVなので、デリミタ(区切り文字)はカンマ区切りになるはずですが、、、、

一体なぜ???

 

実はCSV DATA Set Configは行ごとに複数の値をカンマ区切りで読み込んでくれるのです。

 

どういうことかは具体例で見たほうがわかりやすいので、以下画面キャプチャで説明します。

 

まず、CSVのデータとして行ごとにログイン用のID/PASSをカンマ区切りで準備します。

1979-20

 

CSV DATA Set Configの画面で「Variable Names」に「id,pass」とカンマ区切りで変数名を指定します。

1979-21

 

HTTPサンプラーのリクエストパラメータの値に先ほど指定した変数を入力すれば準備完了です。

1979-22

 

これで負荷テストを実行をすれば、CSVの行ごとにカンマ区切りで入力された値がVariable Namesで指定した変数にそれぞれ格納され、アクセス処理されていきます。

 

これの応用として、CSVの各行に「URL,id,pass」を入力しておいて、HTTPサンプラの設定でパスとリクエストパラメータに変数名を指定しておけば、複数人でいろんなページのURLでログイン処理をさせることができます。

(ログインパーツがサイドナビに固定されているようなサイトでログインしまくる、といったイメージのテストが実現できます)

 

以下、主要な画面キャプチャです。

JMeter CSVでurl,id,passを入力したもの

 

CSV DATA Set Configの設定

JMeter CSV DATA Set Configでファイル名と変数名の指定

 

HTTPサンプラーの設定画面

JMeter CSV DATA Set ConfigでHTTPサンプラーのパス、パラメータの値の指定

 

すごく便利なので、毎回HTTPサンプラーの設定を見なおさなくて済むように設定時に考えておきましょう。

 

最後に

本日__CSVRead関数を紹介しました。

 

JMeterには他にも便利な関数が存在し、中にはJavascriptを実行するものもあります。

 

他によく使う関数で「ランダム」「カウンタ」というものがありますので、そちらは別で紹介したいと思います。

 

2019.2.19追記

ランダム関数についてはコチラの記事を参考ください。

 

Author:yukio iizuka
プロフィール画像
フリーランスとしてUX視点で業務支援しています。 HCD-Net認定 人間中心設計専門家 LEGO®︎ SERIOUS PLAY®︎ メソッドと教材活用トレーニング修了認定ファシリテーター Hi-Standard好きです。
http://yukioiizuka.com
mislead
MISLEADの記事に共感いただけましたら
いいねをお願いします。

コメント一覧

コメントはありません

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください



       

© yukio iizuka All Rights Reserved...