2009年5月28日木曜日

jmeterで繰り返し作業

検索キーワードでjmeterからこのブログに来る人もあったので、間違いを修正。

WinRunnerで実施していた作業を訳あって、他のツールに乗り換える必要が発生しました。
その候補にJmeterがあったので調査したネタです。

ストーリー
  • 繰り返し実施する作業のパラメータをCSVで保持
  • 実施した結果画面の内容を一覧として別ファイル(CSV)に出力すること。
採用したネタ
  • CSV Data Set Config(パラーメータ読み込み)
  • 正規表現抽出
  • BeanShell(結果ファイル出力)
CSV Data Set ConfigはJmeterを負荷テストで利用する際にもよく利用されていると思います。

CVSRead:一行ごとにスレッドを割り当てる。ループ処理では同じスレッドは同一データのまま。
CSV Data Set Config:一行ごとにスレッドはデータを読み込む
という違いがあるようです。

ファイル内のデータをランダムに読み込んで実行することが出来るようですが、今回は先頭からEOFまで
実施すれば良かったので素直にCVS Data Set Configの機能を使います。

正規表現抽出は通常のアサーションでも設定する内容だと思うのでパス。

結構ハマったのがBeanShell。まず、jmeterには付属していないので別途ダウンロードします。
私はJMETER_HOME/lib/extに入れておきました。

通常のアサーション検証後にBeanShell Listenerとして登録したのですが、
これがjavaの構文そのままでscriptとして動くので起動方法さえ分かれば楽チンでした。
アサーションや、正規表現抽出で取得した値もvarsという変数からアクセス出来るようになってます。

例えば、正規表現で取得した${name}を扱う場合には
System.out.println("val is " + vars.get("name"));
こんな感じで出力が可能です。

scriptを確認したい場合には

java -cp bsh-X.X.jar bsh.Interpreter で
bsh% のプロンプトが出現、そのまま
java -jar bsh-X.X.jarで起動すればterminalが出現するので簡単に確認可能です。

ちなみに対象WEBアプリがShift_JISだったのですが、マルチバイト文字をリクエストする際のエンコードが
うまく行っていなかった
のでここもBeanShellを利用して

パーセントエンコーディングは HTTPリクエストのContent encodingを指定することと、Encode?のチェックボックス
をチェックすることで問題なく対応できました。(追記)
${__BeanShell(new org.apache.commons.codec.net.URLCodec("Shift_JIS").encode("${name}"))}


こんな感じで解決できました。
(jmeterにcommons-codecが付属しているのでダウンロードは不要です)

0 件のコメント: