さぼてんのブロク

日々の出来事を備忘録的に書いていきます

Apache JMeter

Webアプリケーションの負荷、機能検証のテストツール。

クライアント側からWebアプリケーションに対して事前に設定した手順でのリクエストを送信し、応答時間や処理結果を確認できる。複数スレッドから同じ動作をさせればサーバーの負荷テストにも利用できる。Javaで作成されているのでいろいろなプラットフォームで稼動しますが、今回はWindowsXPのPCへの導入です。

1)インストール
http://jmeter.apache.org/download_jmeter.cgi からダウンロードします。
イメージ 1

Binariesのapache-jmeter-2.7.zip を選択します。
ローカルにダウンロードして、zipを解凍します。これでインストール完了です。
ソフトは、JavaでできているのでJVMが必要です。このバージョンが必要とする前提のバージョンは

JMeter requires a fully compliant JVM 1.5 or higher.

になっています。PCにインストールされていないようであれば事前に導入が必要です。

2)起動
解凍したフォルダの\apache-jmeter-2.7\binに jmeter.bat というファイルがあるので、これをダブルクリックするとjmeterが起動します。
イメージ 2


3)テストスクリプトの作成
テストを実施する手順を作成していきますが、まずはスレッドグループを作成します。
イメージ 6

イメージ 7

スレッドプロパティの各値は以下のようになります。
スレッド数:このテストスクリプトを実行する際の平行度。複数にするとその分のスレッドが作成されて並行してテストが行われます。テストの目標によってこの数字を調整します。
Ramp-Up期間:指定したスレッド数に何秒で達成するか。たとえばスレッド数10で、Ramp-Up期間を60秒とすると、最初1スレッドからスタートして、6秒ごとに次のスレッドがスタート。60秒後に目標の10スレッドに達します。
ループ回数:このスクリプトのループ回数です。
スケジューラ:指定した時間に開始して、指定した時間に終了させることもできます。

次に、実際発生させるリクエストを定義していきます。
左のペインの”スレッドグループ”を右クリックしてサンプラーを追加します。今回はhttpリクエストを選択します。
イメージ 8


接続するホストと、ポート番号、プロトコル、パスを入力します。
自分はPCローカルにhttpサーバーを起動させていますのでlocalホストですが、ここは自分がテストをしたいサイトのホスト名、あるいはIPアドレスを指定します。
イメージ 9


リスナーの追加
テストをした結果をレポートするためのリスナーを追加します。左のペインのスレッドグループを右クリックして追加します。
今回追加するのは、”結果を表で表示”と”グラフ表示”です。
イメージ 10

3)テスト実行
ここまでの設定が完了したらテストを実行します。
テストの実行方法は、画面の上部にある緑色の三角ボタンを押下します。
実行する前に、ファイルを一度保存します。ファイル→テスト計画を保存で適当な名前をつけて保存します。
イメージ 11


実行中は、緑色の三角ボタンが押せなくなり、代わりにその右横の停止ボタンが押せるようになります。テストが終了したら再び緑色のボタンが表示されます。(今回のスクリプトはループ回数を指定していますので、放っておけば停止しますが、無限ループにしているときには、この停止ボタンを明示的に押す必要があります)
イメージ 12

で、テスト完了。
先ほど作成したリスナーをクリックすると結果が表示されます。
グラフ表示。平均応答時間などがグラフで表示されます。(今回はテスト用にスレッドグループのループ回数を100にしてみました)
イメージ 13


一回ごとのリクエスト結果が表で表示されます。
イメージ 3


簡単でしたが、このような方法でテストスクリプトを作成させることができます。複数ページの操作が必要であれば、HTTPリクエストを追加していくことになります。

4)httpプロキシサーバーを利用したテストスクリプトの作成
実際のテストでは、アプリケーションの画面遷移などを伴って複雑な動きをさせる場合もあるかと思いますが、jmeterをプロキシーサーバーとして動作させて、一連のWebリクエストを自動的に記録することもできます。
この場合には、ワークベンチの上で右クリックしてHTTPプロキシサーバを追加します。
イメージ 4

イメージ 5


画面下部にある開始を押せばプロキシサーバーが起動します。後はブラウザのネットワーク設定を変更してlocalホストのプロキシサーバーを指定するようにするだけです。ブラウザを操作するとそのときに発生しているhttpリクエストを自動的に記録します。
自分的には、同じようなWeb機能テスト用ツールのBadBoyを利用して手順を記録して、それをjeter用のファイルに出力。jmeterで読み込んでから必要な部分を修正するという使い方が簡単でした。

jmeterは機能が豊富で本格的なテスト利用もできそうです。いろいろな機能を試してみようと思います。