今から3分で jmeter の使い方を身に付ける (負荷テスト入門)
Apache jmeterは,Webアプリのパフォーマンス計測のための無料ツール。
このツールの初歩を,今から3分で習得するための記事。
本当に3分きっかりなので集中して頂きたい。
(1) DL
jmeterをダウンロードする。
JMeter Downloads
http://jmeter.apache.org/download_jmeter.cgi
http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
最新版 Binary の zip を落とす。
※ナローバンドの人→ ここでドロップアウトとさせて頂きます。ありがとうございました。
(3) ページ
前項のサーバ起動完了を待たずに,サーバ上にテスト対象ページを設置する。
適当でよい。下記のコードをコピペして 「x.php」 で htdocs 直下に保存。
<?php // 百万回足し算する for( $sum = $i = 0; $i < 1000000; $i ++ ) { $sum += $i; } echo $sum; ?>
(4) jmeter起動
今もうダウンロードが終わっているはずなので,解凍。
解凍半ばで1:00を経過するはず。
解凍中,次項の「テスト計画作成」の所に目を通しておく。
bin/jmeter.bat を実行。jmeterが起動する。
※起動しない人→ JREを入れていなかったようです。ありがとうございました。
(5) テスト計画作成
左ペインの「テスト計画」を右クリックし,「追加」→「スレッドグループ」。
- スレッド数: 50
- Ramp-Up期間(秒): 10 (←スレッド立ち上げ期間のこと)
と入力。
左ペインの「スレッドグループ」を右クリックし,「追加」→「サンプラー」→「HTTPリクエスト」。
- サーバ名またはIP: localhost
- パス: ./x.php
と入力。
左ペインの「スレッドグループ」を右クリックし,「追加」→「リスナー」→「結果を表で表示」。
Ctrl+S し,保存。
(7) 結果
左ペインの「結果を表で表示」を選択。1リクエストあたりの実行時間などが表示される。
表を選択。Ctrl + A。Ctrl + C。エクセルにデータを貼り付ける。終わった。
ダウンロード開始からテストを実行して最後のCtrl+Cまで,私は 2:58 かかりました。
目標
3分間かけて,
- jmeterのテスト計画
- スレッドグループ(多人数で一斉に実行される手順)
- サンプラー(リクエストを送るための物)
- リスナー(結果を見るための物)
- スレッドグループ(多人数で一斉に実行される手順)
という階層構造を理解できればOK。
解説
10 秒の間に 50 の同時アクセスが生じた場合のPHPページの実行時間を計測した。
表の結果を見ると,恐らく,最初の1アクセス目だけは100ミリ秒以上かかっていて,あとの方のリクエストについては数ミリ秒で済んでしまっているのではないだろうか。
実際の負荷テストにおいてやるべき事は,Webアプリケーション中の他のページについても,同様に実行時間を算出することである。
このためには,スレッドグループにさらにサンプラーを追加していけばよい。
サンプラーは,「リクエストで送るパラメータ」の所からGETやPOSTのパラメータを設定する事もできる。
サンプラーの処理結果を取得・分析するためには,スレッドグループに各種リスナーを追加していく。
リスナーが取得したデータをもとに,アプリケーション内での各アクションの平均実行時間を算出し,ボトルネックを見極めたり,実運用への耐性の有無を判定したりする。
なお実際には,負荷のかかるマシンと負荷を計測するマシンが同一であってはいけない。
Tips 1 :外部パラメータの読み込み
ログイン処理等がある場合,全ての同時アクセスが同じユーザ名でログインするわけにはいかない。
個々のリクエストに,それぞれ異なるパラメータを持たせてやることもできる。
「スレッドグループ」を右クリックし,「追加」→「設定エレメント」→「CSV DataSet Config」でCSVファイルから外部パラメータを読み込むことができる。
CSVファイルに
user1,abc
user2,xyz
のように書いておく。置き場は,.jmxファイルと同じ場所など。
jmeter上では,CSV設定で
- Filename : csvファイルのパス
- Variable Names : username,pass (適当な変数名)
サンプラーの「リクエストで送るパラメータ」で
- 名前: Webアプリの認証プログラムが受け付けるform変数名
- 値: ${username} とか ${pass} のように Variable Names を引用
すると,テスト実行時にはCSVファイル中の値がパラメータとして利用される。
パラメータのレコード数は,同時アクセス数よりも多くしておくこと。
Tips 2 :プロキシ機能を使ってテストケースを自動生成
リクエストURLをjmeterにいちいち手入力するのは大変だ。
そうするかわりに,ブラウザ上の挙動をテストケースにインポートしてしまう方法がある。
jmeterをProxyサーバにして,ブラウザからのリクエストにjmeterを仲介させるのだ。
そうすれば,ブラウザが送ったリクエストをjmeterが読み取り,「スレッドグループ」以下に自動で追加してくれる。
この方法は下記サイトなどに詳しい。初心者・入門者のための情報も豊富。
- テスト計画の自動作成(HTTP Proxy Serverの利用) http://www.stackasterisk.jp/tech/engineer/jmeter03_02.jsp#3
- Jakarta JMeter:プロキシサーバ http://www.techscore.com/tech/ApacheJakarta/JMeter/6.html
- JMeter proxy Step-by-step http://jakarta.apache.org/jmeter/usermanual/jmeter_proxy_step_by_step.pdf
パフォーマンステスト実行前には,Webサイトに現実的な量のテストデータを挿入しておくこと。
下記記事などが参考になると思う。
大量のテストデータを快適に作る7つのコツ - 負荷テストのためにExcel&VBAをうまく使う
http://d.hatena.ne.jp/language_and_engineering/20080929/1222698370
関連する記事:
10分で3つのテストツールを習得する (JMeter + qUnit + Selenium) - 主に言語とシステム開発に関して
http://d.hatena.ne.jp/language_and_engineering/20081018/1224254142
大量のテストデータを快適に作る7つのコツ - 負荷テストのためにExcel&VBAをうまく使う - 主に言語とシステム開発に関して
http://d.hatena.ne.jp/language_and_engineering/20080929/1222698370
日本人の氏名のテストデータを,Excel VBAでランダムに生成しよう (ひらがなを使った大量のダミーデータ) - 主に言語とシステム開発に関して
http://d.hatena.ne.jp/language_and_engineering/20120328/p1
テストマネージャになったら,どうする? SEの視点での書評:「現場の仕事がバリバリ進む ソフトウェアテスト手法」 - 主に言語とシステム開発に関して
http://d.hatena.ne.jp/language_and_engineering/20110419/p1