Top / JMeter
JMeter - Apache JMeterはWEB向けのPure Javaなストレスツールです。WEBアプリケーションに対して負荷をかけるためのツールですね。このツールはレポーティング機能も充実しているので、性能テストや負荷テストなどに利用すれば作業を効率よく行うことができそうです。 ダウンロード †The Jakarta Site - JMeter Downloadsよりダウンロード可能です。インストールも解凍するだけですね。 やってみる †実際にやってみます。 シナリオとしては
なんてモノをやってみようと思います。ログインアクションはパラメタとしてuserid,password を取ります。んで、それぞれ userid=hoge password=fuga だったらOKとロジックがくんであります。またトークンチェックとはいわゆるStrutsの同期トークンの機能で、ログアウトのリンクの後ろに /stressTest/logout.do?org.apache.struts.taglib.html.TOKEN =166176d36f24bb9a0c77df7f368d2fd4 というリクエストごとに異なる値が載っているというモノです。このパラメタは毎回異なるので、JMeterの設定は注意が必要です。 絶対に他者のサイトにストレスをかけないでください。他者のサイトにストレスをかけた場合、最悪の場合損害賠償を請求されるかもしれないので、十分ご注意ください。 では実際にストレステストのシナリオを作っていこうと思います。 全体の設定 †テスト計画で右クリックして 追加 > スレッドグループ で追加します。 下記のスレッドグループ設定では、
などを設定します。たとえば
とした場合、10秒で5スレッドを起動するので、2秒に1回(初回の)クエリが発行されることになります。 接続先の指定 †次に接続先のサーバを指定します。テスト計画で右クリックして 追加 > 設定エレメント > HTTPリクエスト初期値設定 で追加します。 ここでは接続先のサーバ名やプロトコルなどを一括で指定することができます。すべてのクエリに載せたいパラメタなんかもかけそうです。 各クエリの追加 †次に各画面ごとのクエリを追加していきます。クエリは スレッドグループを右クリックして 追加 > サンプラー > HTTPリクエスト で追加します。 サンプラーの画面では
などを指定します。たとえば下の例だとリクエストパスを /stressTest/index.do と指定しています。メソッドはGetです。 別のサンプラも作ってみます。ログイン画面表示後の次のアクションであるログイン処理のサンプラを作成します。下記のようにスレッドグループの下にログインアクションを追加しました。このログインアクションはクエリとして userid,password を取るので「リクエストで送るパラメータ」の欄にパラメタとして追加してあります。パラメタの値は可変である場合が多いですが、サンプルは固定で問題ないのでと、りあえず固定で値hoge,fugaを設定しています。 ここまでで一度実行してみます。JMeterのメニューから 実行 > 開始 でストレステストが開始されます。サーバのログなどを見ると負荷がかけられているのが分かると思います。 計測結果をみてみる †先ほどサーバに負荷をかけしましたが、レスポンスタイムやスループットがどれくらいでているかはリスナーという機能で見ることができます。スレッドグループを右クリックし 追加 > リスナー > 結果を表で表示 or 統計レポート でリスナーを追加します。 これらのリスナーはいわゆるレポート機能で「結果を表で表示」はリクエストごとのレスポンスタイムを見ることができます。「統計レポート」はサンプラーごと(=画面ごと)の平均*2レスポンスタイム、スループットなどを見ることができます。
戻り電文をアサーションする †次は戻り電文のアサーションをしてみたいと思います。アサーションは、想定しているhtmlが返ってきているかどうかを確認するために用います*3。 使い方ですが、アサーションしたいアクション(サンプラ)で右クリックし、 追加 > アサーション > アサーション で追加します。 アサーションの画面ではどのようなアサーションを行うかを指定します。下の例では、ログイン後に返ってくるhtml内に「ログインできました!」という文字列が含まれているかどうかをチェックしています。 これでテスト実行しましょう。アサーションの結果は先のリスナ「結果を表で表示」で確認することができます。パスワードなどが間違ってて、戻りhtmlに「ログインできました!」という文字列が含まれていなかった場合は、ステータスが「!」などになるわけですね。 アサーションOK。の場合。 アサーションNG。の場合。 トークンなど、前画面の値をリクエストにセットする †続いてログアウトのサンプラを追加したいと思いますが、先の通りログアウトアクションはトークンチェックをしています。具体的にはパラメタとして org.apache.struts.taglib.html.TOKEN=hogehoge を取り、ここに前画面つまりログインアクションの戻りhtml内の <a href="/stressTest/logout.do?org.apache.struts.taglib.html.TOKEN =7704e3e689f49ec91f539f083da60de2">ログアウト</a> の値を設定する必要があります。ようするに「直前のサンプラの戻り電文内のリンクタグから値を取り出す」必要があるわけですね。 ログアウトアクションのサンプラを作成したあと、正しくログアウトができてることを確認するためアサーションも追加します。正しくログアウトできたら「ログイン画面へ」という文字が含まれたhtmlが返却されるので、それをアサーションすることにします。 もちろんこのままだとトークンがパラメタに載らないため、ログアウトアクションではエラーとなります。 さて前画面の値をリクエストにセットするには「HTMLリンクパーサ」という機能を使用します。ログアウトアクションで右クリックし、 追加 > 前処理 > HTMLリンクパーサ とします。 ログアウトアクションにHTMLリンクパーサが追加されました。次にこのログアウトアクションはパラメタにトークンを取るので org.apache.struts.taglib.html.TOKEN=.* をパラメタに追加します。 また、トークンはJ2EEセッションがつながっている必要があるため、Cookieを送出するよう設定を追加します*4。追加方法はテスト計画を右クリックし 追加 > 設定エレメント > HTTP クッキーマネージャ でOKです。 これでリクエストすると、、、、確かに前画面のhtmlリンクから値を取り出し、パラメタにトークンが載るようになりました! ユーザ定義の変数をつかう †戻り電文の任意の値を次のリクエストにセットする †先ほどは、前画面の戻りhtmlのなかの特定のリンクタグからパラメタを取得するというやり方を説明しましたが、次はもっと汎用的に(以下書き途中、、、、)。 ID/PASSなど、可変な値をリストファイルからセットする †オペレーションを自動記録する †今まで手動でサンプラー(リクエスト)を作ってきましたが、実はJMeterをプロキシサーバにして、リクエスト・レスポンスを自動的にキャプチャすることができます。これをすれば上り電文のパラメタとかいちいち設定する必要がなくて、とても便利そうです。 プロキシサーバの追加 †ワークベンチで右クリックして、 追加 > Non Test エレメント > HTTP プロキシサーバ でプロキシサーバを追加します。 XML-RPCのようなkey=value形式でないクエリを送信する †関連リンク †
この記事は
Top / JMeter
現在のアクセス:161426 |