JMeter

ただいま格闘中.昔使ってみたときとくらべて,UIも随分洗練されていて,結構ぐーな感じ.
どうにかクセを掴んできたんで,忘れないうちにメモ.

SSL(https)でテストするには?

jmeter.propertiesのjavax.net.ssl.trustStorejavax.net.ssl.keyStorePasswordを設定する.
手っ取り早く,JDK付属のcacertsを指定するのが吉(パスワードは"password"だった).

クライアント認証は必要ないからスルー.

テスト計画について

だいたいこんな感じにしとく.

HTTP リクエスト初期値設定」でテスト対象のサーバやプロトコル,ポートを設定する.
セッションクッキー使うから「HTTP クッキーマネージャ」をおいておく(特に設定いらない).
HTTP ヘッダマネージャ」は必要に応じて設置.今回は,User-Agent:を偽装する必要があったんで置いといた.


シナリオは「HTTPプロキシサーバ」使って記録すると便利.
「HTTPヘッダの取り込み」をONにすると,なんか調子悪かったので外しといた.その代わりに「HTTP ヘッダマネージャ」を置いてある.

あと,「挿入するパターン」と「除外するパターン」の使い方がわからんかった.:-(


プロキシが余計なリクエストも記録してうざいので「各グループの最初のサンプラーだけ保存」がお勧め.

動的なリクエストを組み立てるには.

スレッドごとに固定の値を用意するなら「ユーザーパラメータ」に登録しておけばいい.
ただこれ,100多重とかでも,全部手打ちで用意しないとダメなのかな?だとすると,ちと萎える.
FAQに書いてあった.→How do I use external data files to in my Test scripts?
ユーザーパラメータにこんな風なこと書けばいいそうだ.

名前ユーザー_1
user_id${_StringFromFile(user_id.txt)}
password${_StringFromFile(password.txt)}
user_id.txtやpassword.txtは,$JMETER_HOME/binに置いておく.中身はベタなテキストで,こんな感じ.

---user_id.txt---
11111
22222
33333

---password.txt---
pass1
pass2
pass3

日本語もOK.エンコードはプラットフォームのデフォルトで良いようだ(Win環境だとWindows-31J).


レスポンスに含まれる値を引っこ抜くには「正規表現抽出」を使う.
例えば,「検索画面 - 条件入力」の結果ページに

<input type="hidden" name="param_1" value="xxxxx">

ってのがあって,この 'xxxxx' を次のリクエストで使いたい場合は,こんな感じの「正規表現抽出」を用意する.

Response Field to check: Body
参照名: param_1
正規表現: <input type="hidden" name="param_1" value="(\w*)">
テンプレート: $1$
一致番号(0から乱数): 0
初期値: 

こうしとくと,以降のサンプラーで変数:${param_1}が使えるようになる.チェックボックスとか選択内容が複数ある場合も対応できるみたい.
Regular Expression Extractor


正規表現抽出」の設置場所は,スレッドグループ内のどこでもいいみたいだけど,わけわかんなくなるんで,値を引っこ抜きたいサンプラーの子供にしてる.


似たような要素に,HTML Link Parserってのもあったけど使いこなすに至らず.あと,__regexFunctionも.

リモートテスト

JMeterのサーバ(アタッカ?)は,クライアント(モニタ)より先に立ち上げとく.起動すんのは,jmeter-server.batを叩くだけ.
モニタ兼アタッカにする場合,ローカルでもjmeter-server.batを叩く必要あり.

いろいろややこしいから,同一マシン上でモニタとアタッカを立ち上げる場合は,それぞれ専用の$JMETER_HOMEを持ったほうがいいかも.


そんでもって,多重度について.
スレッドグループのスレッドが10,アタッカが2台だとしたら,どう分配すんのかな?って思ったら何のことは無い.10多重×2台で20多重になるだけだった.:-(
それと盲点が.${_StringFromFile(filename)}で外部ファイルを指定する場合,アカッタにそのファイルがないと動かなかった.
共有されるのはシナリオだけみたいね.
#キイタ?( ゜д゜)オクサン(゜д゜ )アラヤダワァ


これを逆手にとって,アタッカごとに内容が異なるファイルを置けば,多重度上げてもユーザ名がかぶったりしなくすることができる.
テストユーザが100人だとして,外部ファイルには10人づつ(1〜10, 11〜20, 21〜30みたいに)書いて,それぞれのアタッカ(1〜10とか)に分配.
でもって,多重度10で実行すれば100多重でのアタックとなるわけだ.

あと,ちとメンドイけどjmeter.propertiesのremote_hostsを書き換えて,アカッタの数を調整すれば多重度の調整にもなるぞと.
#ビンボ人は創意工夫が大事ね.:-P

その他

プロキシや実際のテストもそうなんだけど,日本語はバケる.でも,サンプラーにハードコードしたり,ユーザーパラメータに登録してある値は平気(なぜか「Encode?」をチェックしないとうまく行ってる).
なんで致命的ではない.


思いのほか良くできてるなぁ>JMeter