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
次にHTTPサンプラーです。
Webサーバには検証サイトであるpenguinweb.netの情報を入力し、パスの部分にCSVを参照する関数を利用して、
${__CSVRead(url.csv,0)}
と入力します。
__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)}
としています。
これで設定は完了なので、リスナーから「結果をツリーで表示」を作成して実行させます。
「結果をツリーで表示」からリクエストタブを選択すると、どのURLに対して実行たのかを確認できます。
下の画面キャプチャの通り、ちゃんとCSVの一番最初のURLが実行されています。
その下の実行結果では、CSVの2番めのURLが実行されていますね。
なお「結果を表で表示」だと以下のとおり正しく処理されていそうでが、これではどのURLかわかりませんので、「結果をツリーで表示」で確認しましょう。
これで外部の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の設定方法
では、JMeterでの設定方法について説明していきます。
スレッドグループの設定は、__CSVRead関数の説明と同様に早く完了する値にしています。
画面左メニューの「追加」から「設定エレメント」より「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}と入力します。
これで設定は完了です。
実行して「結果をツリーで表示」のリクエストタブを確認します。
CSVのURLが指定通り実行されていることが確認できました。
CSV DATA Set Configについて
GUIなので特に難しそうなところはないと思いますが、1点ハマりポイントがありますので、そちらを紹介します。
ハマりポイントとは、先ほどCSVファイルを改行で指定した箇所のことです。
CSVなので、デリミタ(区切り文字)はカンマ区切りになるはずですが、、、、
一体なぜ???
実はCSV DATA Set Configは行ごとに複数の値をカンマ区切りで読み込んでくれるのです。
どういうことかは具体例で見たほうがわかりやすいので、以下画面キャプチャで説明します。
まず、CSVのデータとして行ごとにログイン用のID/PASSをカンマ区切りで準備します。
CSV DATA Set Configの画面で「Variable Names」に「id,pass」とカンマ区切りで変数名を指定します。
HTTPサンプラーのリクエストパラメータの値に先ほど指定した変数を入力すれば準備完了です。
これで負荷テストを実行をすれば、CSVの行ごとにカンマ区切りで入力された値がVariable Namesで指定した変数にそれぞれ格納され、アクセス処理されていきます。
これの応用として、CSVの各行に「URL,id,pass」を入力しておいて、HTTPサンプラの設定でパスとリクエストパラメータに変数名を指定しておけば、複数人でいろんなページのURLでログイン処理をさせることができます。
(ログインパーツがサイドナビに固定されているようなサイトでログインしまくる、といったイメージのテストが実現できます)
以下、主要な画面キャプチャです。
CSV DATA Set Configの設定
HTTPサンプラーの設定画面
すごく便利なので、毎回HTTPサンプラーの設定を見なおさなくて済むように設定時に考えておきましょう。
最後に
本日__CSVRead関数を紹介しました。
JMeterには他にも便利な関数が存在し、中にはJavascriptを実行するものもあります。
他によく使う関数で「ランダム」「カウンタ」というものがありますので、そちらは別で紹介したいと思います。
2019.2.19追記
ランダム関数についてはコチラの記事を参考ください。
コメント一覧
コメントはありません