// 下階層用テンプレート
#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の同期トークンの機能>Struts/同期トークンで二度押しなどをチェックする]]で、ログアウトのリンクの後ろに
 /stressTest/logout.do?org.apache.struts.taglib.html.TOKEN
                            =166176d36f24bb9a0c77df7f368d2fd4
というリクエストごとに異なる値が載っているというモノです。このパラメタは毎回異なるので、JMeterの設定は注意が必要です。


&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)



***各クエリの追加 [#h0b5d90d]
次に各画面ごとのクエリを追加していきます。クエリは スレッドグループを右クリックして
 追加 > サンプラー > HTTPリクエスト
で追加します。

#ref(05sampler.png)

サンプラーの画面では
-パス(URLのコンテキスト以下)
-GETかPOSTか
-クエリのパラメタ

などを指定します。たとえば下の例だとリクエストパスを /stressTest/index.do と指定しています。メソッドはGetです。

#ref(06sampler.png)


別のサンプラも作ってみます。ログイン画面表示後の次のアクションであるログイン処理のサンプラを作成します。下記のようにスレッドグループの下に[[ログインアクション>http://www.masatom.in/cgi-bin/viewvc.cgi/trunk/stressTest/source/nu/mine/kino/stresstest/LoginAction.java?root=Others&view=co]]を追加しました。このログインアクションはクエリとして userid,password を取るので「リクエストで送るパラメータ」の欄にパラメタとして追加してあります。パラメタの値は可変である場合が多いですが、サンプルは固定で問題ないのでと、りあえず固定で値hoge,fugaを設定しています。

#ref(07parameter.png)


ここまでで一度実行してみます。JMeterのメニューから
 実行 > 開始
でストレステストが開始されます。サーバのログなどを見ると負荷がかけられているのが分かると思います。


***計測結果をみてみる [#v36eef60]
先ほどサーバに負荷をかけしましたが、レスポンスタイムやスループットがどれくらいでているかはリスナーという機能で見ることができます。スレッドグループを右クリックし
 追加 > リスナー > 結果を表で表示 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]
続いてログアウトのサンプラを追加したいと思いますが、先の通りログアウトアクションはトークンチェックをしています。具体的にはパラメタとして
 org.apache.struts.taglib.html.TOKEN=hogehoge
を取り、ここに前画面つまりログインアクションの戻りhtml内の
 <a href="/stressTest/logout.do?org.apache.struts.taglib.html.TOKEN
           =7704e3e689f49ec91f539f083da60de2">ログアウト</a>
の値を設定する必要があります。ようするに「直前のサンプラの戻り電文内のリンクタグから値を取り出す」必要があるわけですね。


ログアウトアクションのサンプラを作成したあと、正しくログアウトができてることを確認するためアサーションも追加します。正しくログアウトできたら「ログイン画面へ」という文字が含まれたhtmlが返却されるので、それをアサーションすることにします。

#ref(15assertion.png)


もちろんこのままだとトークンがパラメタに載らないため、[[ログアウトアクション>http://www.masatom.in/cgi-bin/viewvc.cgi/trunk/stressTest/source/nu/mine/kino/stresstest/LogoutAction.java?root=Others&view=co]]ではエラーとなります。


さて前画面の値をリクエストにセットするには「HTMLリンクパーサ」という機能を使用します。ログアウトアクションで右クリックし、
 追加 > 前処理 > HTMLリンクパーサ
とします。

#ref(16htmlLinkParser.png)

ログアウトアクションにHTMLリンクパーサが追加されました。次にこのログアウトアクションはパラメタにトークンを取るので
 org.apache.struts.taglib.html.TOKEN=.*
をパラメタに追加します。

#ref(17parserParam.png)


また、トークンはJ2EEセッションがつながっている必要があるため、Cookieを送出するよう設定を追加します((まあURLRewritingの場合もあり得るわけですが、、。))。追加方法はテスト計画を右クリックし
 追加 > 設定エレメント > HTTP クッキーマネージャ
でOKです。


#ref(18Cookie.png)


これでリクエストすると、、、、確かに前画面のhtmlリンクから値を取り出し、パラメタにトークンが載るようになりました!




**ユーザ定義の変数をつかう [#e4f59b7b]


**戻り電文の任意の値を次のリクエストにセットする [#lf5719c5]
先ほどは、前画面の戻りhtmlのなかの特定のリンクタグからパラメタを取得するというやり方を説明しましたが、次はもっと汎用的に(以下書き途中、、、、)。


**ID/PASSなど、可変な値をリストファイルからセットする [#q3b56c65]


**オペレーションを自動記録する [#xb011c59]
今まで手動でサンプラー(リクエスト)を作ってきましたが、実はJMeterをプロキシサーバにして、リクエスト・レスポンスを自動的にキャプチャすることができます。これをすれば上り電文のパラメタとかいちいち設定する必要がなくて、とても便利そうです。


***プロキシサーバの追加 [#i1cd78f4]
ワークベンチで右クリックして、
 追加 > 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(おもしろかった[63],そうでもない[5])
- はじめまして。JMETERのXML-RPCのようなkey=Value形式でないクエリを送信する に記述がないのは、できないということですか -- [[船木]] &new{2009-04-18 (土) 18:21:12};

- コメントありがとうございます。書かなきゃと思って、追いついてない状況です(´д`;)。ものすごく前に書いた記事なので、やり方自体忘れてます。あまりお役に立てなくてすいません。 -- [[きの]] &new{2009-04-20 (月) 17:50:12};
- dCzHTVYunVptjAOhwT -- [[xyihcfgsra]] &new{2012-02-25 (土) 04:22:15};
- i4U3hs http://www.gXGTUnVS1fd7ZWMjsE7U6AzFIyR5v1OH.com -- [[m4V8KKMr]] &new{2012-03-23 (金) 15:28:08};
- A few months <a href=" http://www.bestiario.com/letras/ ">robaxin brand name</a>  An aerial photo shows a Chinese marine surveillance ship Haijian No. 66 (C) cruising next to Japan Coast Guard patrol ships in the East China Sea, near what are known as the Senkaku isles in Japan and the Diaoyu islands in China, in this photo taken by Kyodo April 23, 2013.  -- [[Isabelle]] &new{2014-09-08 (月) 21:01:10};
- I've lost my bank card <a href=" http://www.semanticweb.gr/topos/ ">motilium uk sp</a>  Former staff at Mid Staffordshire hospital trust, where up to 1,200 patients are thought to have died unnecessarily due to poor care, claimed it was blighted by a culture of fear. One staff nurse told the Francis Inquiry she had been physically threatened.  -- [[Diana]] &new{2014-09-13 (土) 09:49:53};
- 御世話になっております。Jmeterで負荷テストをおこなおうとしております。もしログオンに失敗した場合や、途中で画面遷移ができなかった場合は、結果表にカウントされるのでしょうか?それとも結果表にある「Error%」に表示されるのでしょうか?」 -- [[yoshino]] &new{2015-01-09 (金) 11:33:35};
- How would you like the money? <a href=" http://www.leevalleylions.co.uk/nexium-10-mg-for-babies.pdf ">nexium 20 mg cost</a>  Juan Pablo Montoya griped over his radio that trying to pass another car cost him position on the track. Jimmie Johnson suggested the track needed a second lane with more banking to help the cause. Denny Hamlin called passing "impossible."  -- [[Makayla]] &new{2016-06-04 (土) 21:09:07};
- What part of  do you come from? <a href=" http://robin-stevens.co.uk/is-there-a-generic-for-nexium-yet.pdf ">nexium prices walmart</a>  Yes there are a number of options available, you can set your browser either to reject all cookies, to allow only "trusted" sites to set them, or to only accept them from the site you are currently on.  -- [[Normand]] &new{2016-06-05 (日) 00:18:39};
- Not available at the moment <a href=" http://www.helicondesigns.co.uk/buy-olanzapine-online.pdf ">olanzapine 15</a>  The 21-week trial, which has opened a window into the private life and last days of the King of Pop, has put not only concert promoter AEG Live on trial but also the entertainment industry's live-performance business model, analysts say.  -- [[Kimberly]] &new{2016-06-05 (日) 04:40:22};
- Is it convenient to talk at the moment? <a href=" http://www.mertecgarage.co.uk/mirtazapine-15-mg-uses.pdf#judge ">mirtazapine 15 mg tabl</a>  "What we found follows exactly what the anthropologists have told us, and the molecular geneticists who have analyzed the human genome have told us, about where humans originated and how they spread across the planet."  -- [[Hiram]] &new{2016-06-05 (日) 05:49:55};
- How do you know each other? <a href=" http://robin-stevens.co.uk/accutane-online-uk.pdf ">buy roche accutane online uk</a>  Its UK bus unit outside London saw 4.5 per cent growth, while its buses in the city posted a 0.6 per cent drop â?? a decline that Stagecoach expects will correct as new contracts begin later in the year.  -- [[Colton]] &new{2016-06-05 (日) 07:00:32};
- I'm a member of a gym <a href=" http://www.helicondesigns.co.uk/generic-mirtazapine-cost.pdf ">remeron 7.5 mg</a>  Private placements are a relatively inexpensive way ofraising funds, and thus a key source of capital for smallcompanies. Making it easier for investors to participate couldboost the funds available to junior miners, buttressing Canada'sreputation as a center of mining finance.  -- [[Irvin]] &new{2016-06-05 (日) 08:10:58};

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS