くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

JMeter

JMeterの正規表現

最近JMeter使う必要があったのですが、ログイン系のことやる時って、

だいたい、hiddenのinputのトークンみたいなIDを取っておいて、

次のリクエストでそのトークンを一緒に送る。みたいな作りになってるやつ多いと思うんです。

これを取るのに、Jmeterの正規表現を使ってinputのvalue取ると思うのですが、

ネットのサンプルって大体↓になってる。

<input type='hidden' id='hoge' name='hoge' value='(.*)' />

でもこれって、最長マッチしてるから、例えば、

<input type='hidden' id='hoge' name='hoge' value='12345' /><input type='hidden' id='fuga' name='fuga' value='67890' />

みたいなHTMLになってると、この正規表現で最初に取れる値って下記になるんですよね。

12345' /><input type='hidden' id='fuga' name='fuga' value='67890

なので、本来は最短マッチの下記にしておかないと汎用性ないんじゃないかと思ったり思わなかったり。

<input type='hidden' id='hoge' name='hoge' value='(.*?)' />

JMeterで負荷テストみたいな事をやる

社内用にちんまいWebアプリを作って運用してたりするけど、最近、利用が拡大してきたので、負荷的に耐えれるのか心配になり、ちょっと負荷テストをやってみる。JMeterを使用したけど、そのあたりのメモ。いろいろ解説サイトがあるんだけど、正直あーだこーだ多すぎて、とりあえずやるってものがない。なのでとりあえずやるって感じの場合。

なんとゆーか全体的にもろもろの解説サイトのノリがアレな感じがして、ちょっと引いた。最近Java触ってないけど、近頃のJavaちっくな人たちはあーゆーノリが多いのだろうか。。。。

まぁいいや。とりあえず本家からダウンロード。DownloadsのBinariesから。zipの落とせば問題ないはず。

展開したら、中のbinの「jmeter.bat」で起動かな。念のため右クリ⇒管理者で実行でやる。起動したら初画面は↓の感じ。

no title

まずは、テスト計画に「スレッドグループ」を作る。
1

そしたら、スレッドグループに「記録コントローラ」作る。
2

次は、ワークベンチにHTTPプロキシを追加する。
3

で、このプロキシを動かして、ブラウザでこの子を通して、テストしたいサイトにアクセス。テストしたい手順を自分の手で一回やって、プロキシ側で記録コントローラにテストシナリオのスクリプトが作られていくとゆー寸法です。

プロキシのデフォ設定は↓の感じ。
5
ポートとか特に問題なければ開始をクリック。
あー、クリックすると↓のポップアップでるけど、気にせずOK。
6

そしたら、ブラウザのプロキシをこの子につなぐように設定してあげる。↓の感じ。IEの場合。
7
8

あとは、ブラウザでサイトにアクセスすると、記録コントローラにGetしてるURLがどんどんたまる。ログインとかも大抵は問題なく行けるはず。↓の感じ。
10

テストしたい手順をやり終わったら、プロキシ止める。ブラウザの設定ももとに戻しておいた方がいいと思う。

そしたら、テストをやるのですが、何もしてないと手順を実行するだけで、結果がどーなったのか全く分からない。なので、スレッドグループに以下のものを追加しておく。
11

で、実行する。↓の感じ。
13

しばらくすると、テストが終わるので、結果を見る。一番見やすいのは↓の「統計レポート」かな。
14

ここまでで、「とりあえずやる」的な感じ。色々見てると、自分でスクリプト作って~~みたいな事を書いてあったりもするけど、正直そこまでやる気は微塵もなかったりする。これだけ動けば9割くらいは十分でしょ。。。

あと、負荷を計算するのに以下を知っておかないとつらそー。

総テスト回数: スレッド数 × ループ回数
1秒当たりのテストの回数: 総テスト回数 ÷ Ramp-Up期間

Ramp-Up期間がわかりにくい。スレッド数×ループ回数の実行をRamp-Up期間の秒数内で実行するという事らしい。なので、Ramp-Up期間は基本固定なんじゃないかと思う。

あとは、知っておくと便利なとこ。

テストの統計情報はずっとたまり続けるので、パラメータ変えていろいろやりたい場合はその都度クリアが必要。クリアしたい場合は↓のボタン。
15

右上の↓のやつが一体何なのかよくわかんなかったけど、
16
実行しているスレッド数らしい。これが0になればテスト完了みたいな扱い。

問合せ