// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 [[JMeter - Apache JMeter>http://jakarta.apache.org/jmeter/]]はWEB向けのPure Javaなストレスツールです。WEBアプリケーションに対して負荷をかけるためのツールですね。このツールはレポーティング機能も充実しているので、性能テストや負荷テストなどに利用すれば作業を効率よく行うことができそうです。 #contents **ダウンロード [#yc0a4fcb] [[The Jakarta Site - JMeter Downloads>http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi]]よりダウンロード可能です。インストールも解凍するだけですね。 **やってみる [#sab3fc53] 実際にやってみます。 シナリオとしては -http://localhost:8080/stressTest/index.do でログイン画面表示 -http://localhost:8080/stressTest/login.do でログインアクション->ログイン中画面 -http://localhost:8080/stressTest/logout.doでログアウトアクション->ログアウトしました画面->元のログイン画面 -ログアウトアクションでは、トークンチェックしている なんてモノをやってみようと思います。ログインアクションはパラメタとしてuserid,password を取ります。んで、それぞれ userid=hoge password=fuga だったらOKとロジックがくんであります。またトークンチェックとはいわゆる[[Strutsの同期トークンの機能>]]で、ログアウトのリンクの後ろに /stressTest/logout.do?org.apache.struts.taglib.html.TOKEN =166176d36f24bb9a0c77df7f368d2fd4 というリクエストするごとに異なる値が載っているというモノです。このパラメタは毎回異なるので設定には注意が必要です。 &color(red){絶対に他者のサイトにストレスをかけないでください。他者のサイトにストレスをかけた場合、最悪の場合損害賠償を請求されるかもしれないので、十分ご注意ください。}; ***全体の設定 [#g43446a6] テスト計画で右クリックして 追加 > スレッドグループ で追加します。 #ref(01.png) 下記のスレッドグループ設定では、 -スレッド数 -何秒かけて起動するか((10秒と設定したら、上のスレッドを10秒かけて起動する)) -ループ回数(上の設定を何回ループするか) などを設定します。たとえば -スレッド数 5 -Ramp-Up期間 10秒 -ループ回数 1 とした場合、10秒で5スレッドを起動するので、2秒に1回(初回の)クエリが発行されることになります。 #ref(02threadGroup.png) ***接続先の指定 [#n9577943] 次に接続先のサーバを指定します。テスト計画で右クリックして 追加 > 設定エレメント > HTTPリクエスト初期値設定 で追加します。 #ref(03Init.png) ここでは接続先のサーバ名やプロトコルなどを一括で指定することができます。すべてのクエリに載せたいパラメタなんかもかけそうです。 #ref(04Init.png) ***各クエリの追加 [#k8383530] 次に各画面ごとのクエリを追加していきます。クエリは スレッドグループを右クリックして 追加 > サンプラー > HTTPリクエスト で追加します。 #ref(05sampler.png) サンプラーの画面では -パス(URLのコンテキスト以下) -GETかPOSTか -クエリのパラメタ などを指定します。たとえば下の例だとリクエストパスを /stressTest/index.do と指定しています。メソッドはGetです。 #ref(06sampler.png) 次にログイン処理を行います。スレッドグループの下にログインアクションを追加しました。このログインアクションはクエリとして userid,password を取るので「リクエストで送るパラメータ」の欄にパラメタとして追加してあります。パラメタの値は可変である場合が多いですが、サンプルは固定で問題ないのでと、りあえず固定で値hoge,fugaを設定しています。 #ref(07parameter.png) ここまでで一度実行してみます。JMeterのメニューから 実行 > 開始 でストレステストが開始されます。サーバのログなどを見ると負荷がかけられているのが分かると思います。 ***計測結果をみてみる [#ef3f2f6e] 先ほどサーバに負荷をかけしましたが、レスポンスタイムやスループットがどれくらいでているかはリスナーという機能で見ることができます。スレッドグループを右クリックし 追加 > リスナー > 結果を表で表示 or 統計レポート でリスナーを追加します。 #ref(08rep.png) これらのリスナーはいわゆるレポート機能で「結果を表で表示」はリクエストごとのレスポンスタイムを見ることができます。「統計レポート」はサンプラーごと(=画面ごと)の平均((平均や最小、最大ほか))レスポンスタイム、スループットなどを見ることができます。 -結果を表で表示 #ref(09table.png) -統計レポート #ref(10stat.png) ***戻り電文をアサーションする [#e429ae02] 次は戻り電文のアサーションをしてみたいと思います。アサーションは、確かに想定しているhtmlが返ってきていることを確認するために用います。 使い方ですが、アサーションしたいアクション(サンプラ)で右クリックし、 追加 > アサーション > アサーション で追加します。 #ref(11assertion.png) アサーションの画面ではどのようなアサーションを行うかを指定します。下の例では、ログイン後に返ってくるhtml内に「ログインできました!」という文字列が含まれているかどうかをチェックしています。 #ref(12assertion.png) これでテスト実行しましょう。アサーションが正しかったかどうかは、先のリスナ「結果を表で表示」で確認することができます。わざとパスワードなどを間違えて「ログインできました!」が戻りhtmlに含まれていなかった場合は、ステータスが「!」などになるわけですね。 #ref(13ok.png) アサーションOK。の場合。 #ref(14ng.png) アサーションNG。の場合。 ***トークンなど、前画面の値をリクエストにセットする [#gc45366b] **リクエストにCookieを載せる [#j5744936] **ユーザ定義の変数をつかう [#e4f59b7b] **戻り電文の任意の値を次のリクエストにセットする [#lf5719c5] 先ほどは、前画面の戻りhtmlのなかの特定のリンクタグからパラメタを取得するというやり方を説明しましたが、次はもっと汎用的に(以下書き途中、、、、)。 **ID/PASSなど、可変な値をリストファイルからセットする [#q3b56c65] **オペレーションを自動記録する [#xb011c59] 今まで手動でサンプラー(リクエスト)を作ってきましたが、実はJMeterをプロキシサーバにして、リクエスト・レスポンスを自動的にキャプチャすることができます。これをすれば上り電文のパラメタとかいちいち設定する必要がなくて、とても便利そうです。 ***プロキシサーバの追加 [#y23e7a50] ワークベンチで右クリックして、 追加 > Non Test エレメント > HTTP プロキシサーバ でプロキシサーバを追加します。 **XML-RPCのようなkey=value形式でないクエリを送信する [#lbb9d23b] **関連リンク [#u0c0b76c] -[[JMeter - Apache JMeter>http://jakarta.apache.org/jmeter/]] -[[JMeter(高機能/フリーなテストツール)第1回:JMeterの基本>http://www.stackasterisk.jp/tech/engineer/jmeter01_01.jsp]] -[[JMeter(高機能/フリーなテストツール)第01回:JMeterの基本>http://www.stackasterisk.jp/tech/engineer/jmeter01_03.jsp]] -[[JMeter-TECHSCORE->http://www.techscore.com/tech/ApacheJakarta/JMeter/index.html]] -[[[jmeter] - marsのメモ>http://d.hatena.ne.jp/masanobuimai/searchdiary?word=*%5Bjmeter%5D]] -[[テスト・スクリプト改善のヒント - ITアーキテクト [IT Architect]>http://www.itarchitect.jp/methodology_and_design/-/39302-1.html]] -[[Apache-JMeter.pdf (application/pdf オブジェクト)>http://www.jp.compaq.com/products/software/oe/linux/summary/reference/pdfs/Apache-JMeter.pdf]] ---- この記事は #vote(おもしろかった,そうでもない) #comment #topicpath SIZE(10){現在のアクセス:&counter;}