JMeterの埋込関数で動的変数を扱う

負荷テストツール「JMeter」を触っているのですが、日本語情報少なかったことを調べたのでメモ。
もはやRubricksと関係ありませんが。


JMeterは負荷ツールなので、たくさんのリクエストをWebサーバに対して発行してくれます。
ただ、一意性確保などの理由で、リクエスト毎に微妙に異なる値をパラメータに含めなくてはならない局面があります。
JMeterではユーザ定義変数という仕組みが提供されていて、${user1_name}とか書くとあらかじめ宣言していた値をあてこむことができます。
でもこの方法だと、異なる値が100個必要なら100個の変数を手動で作らなくてはなりません。動的に変数の値を生成するのはどうやるのでしょうか。


そんなときに役立つのが埋め込み関数であるFunctions。
下記のような関数が準備されています。

  • regexFunction - regular expression evaluator
  • counter
  • threadNum - get thread number
  • intSum - add variables
  • StringFromFile - read a line from a file
  • machineName - get the local machine name
  • JavaScript (Apache Rhino)
  • random number
  • CSVRead - read from CSV delimited file
  • read a property
  • P - read a property
  • setProperty - set a property
  • log - log a message
  • logn - log a message
  • BeanShell - run BeanShell
  • split - Split a string into variables
  • XPath - XPath use an xpath expression
  • time - return current time in various formats
  • jexl - evaluate a Commons Jexl expression

counterをつかえば連番を発行できます。
randomを使うと、ランダム値が発行できるので、ユーザを登録し続けるようなテストをしたい場合に(大体)一意な値を作ったりできます。
他にもCSVをよんだりとか、現在時刻を取得したりとか、JSでソースが掛けたりとかいろいろあります。


関数の使い方ですが、何気にCtrl+Fを押すと関数利用のヘルパが出てきてあとはなんとなくいじればわかります。
なかなか芸が細かい。


詳しくは
http://jakarta.apache.org/jmeter/usermanual/functions.html


(Shouta)