オープンソースカンファレンス 2006 Tokyo/Fal Apache JMeter で性能試験をしよう! 水野浩典オープンソース コンピテンシ センター日本ヒューレットパッカード株式会社 2006 年 10 月 28 日 2006Hewlet-PackardDevelopmentCompany,L.P. Theinformationcontainedhereinissubjecttochangewithoutnotice 内容 性能試験の重要性 ApacheJMeter 性能試験方法 AP サーバのチューニングのヒント 2 平成 18 年 10 月 30 日 1 Copyright 2006HPcorporatepresentation.Alrightsreserved.
性能 負荷試験の重要性 必要な理由 性能 負荷試験は 単体テストや結合テストでは発見することが出来なかった問題を見つけるために必ず行う必要があります 必要な理由 ( その 2) 実際には 想定外の負荷が掛かることも考慮し 想定外の負荷試験を実施することも重要となります 本当の理由 システムのカットオーバー後の夜中や休日に 緊急に呼び出されないようにするため! 3 平成 18 年 10 月 30 日 現実に発生している問題 性能試験が そもそも計画に入っていない 納期に間に合わないので 機能試験はしたが性能試験まで出来なかった 性能 負荷試験を実施するには 商用製品が必要なことが分かったが 高いので買えない 性能 負荷試験の重要性をプロジェクト内で認識して 実施するようにして下さい Free で使用できる ApacheJMeter を御使用下さい 試験ツールの使い方が良く分からない とりあえず 性能 負荷試験をしてみたが 試験結果が正しいかよく分からない? 以前に性能試験をしてみたが 大変だったので出来ればやりたくない なんだか性能が出ない... 今から 御説明致します 経験によるところも多いのですが 性能 負荷試験のセオリーについて御説明致します 4 平成 18 年 10 月 30 日 2 Copyright 2006HPcorporatepresentation.Alrightsreserved.
ApacheJMeter 概要 JMeter とは JMeter は Jakarta プロジェクトが開発しているパフォーマンス計測 / 負荷テストツール オープンソース 無償 100% purejava なので Windows Linux など 実行環境に依存しない GUI を用いて操作できる 大量のクライアントからのリクエスの生成 / 実行が可能 HTTP(HTTPS) データベース FTP WEB サービスなどの様々なプロトコルでのパフォーマンス検証が可能 エラー発生の有無 期待したデータがレスポンスに含まれているかの確認なども簡単に行うことが可能 Web ブラウザ上で行った操作をテストのシナリオとして記録し それをテスト スクリプトとして繰り返し利用 簡単に編集可能 6 平成 18 年 10 月 30 日 3 Copyright 2006HPcorporatepresentation.Alrightsreserved.
web システムの性能 負荷試験 通常 web システムにおいては複数の web ブラウザからの多くのリクエストを送出 複数のブラウザの代わりに JMeter から擬似的にリクエストを送出 web ブラウザ Load Balancer Apache WebServer Database Storage 7 平成 18 年 10 月 30 日 JMeter の動作概要 実行 JMeter にテストプランを設定して これを実行する テストプラン 手動で作成するか プロキシ機能を用いて自動で作成 テストプランの中で 生成するスレッド数と実行回数を指定 複数クライアントの実行 Java のスレッドを用いて 複数クライアントの同時実行を実現 テストプラン *.jmx 結果ファイル *.jtl Thread (Client) HTTP リクエスト 測定対象の web サーバ 8 平成 18 年 10 月 30 日 4 Copyright 2006HPcorporatepresentation.Alrightsreserved.
ApacheJMeter 入門 JMeter のインストール ファイルをダウンロードし 適当なディレクトリに展開するだけです 1.JMeter のダウンロード Jakarta サイトの以下ページより最新の JMeter バイナリをダウンロード htp://jakarta.apache.org/site/binindex.cgi#jmeter_binaries 最新版は JMeter2.2 です ここでは jakarta-jmeter-2.2.zip をダウンロード 2.JMeter のインストールダウンロードした zip/tar ファイルを JMeter をインストールしたいディレクトリに展開 10 平成 18 年 10 月 30 日 5 Copyright 2006HPcorporatepresentation.Alrightsreserved.
JMeter の起動 JMeter を展開してできたディレクトリにある bin ディレクトリの JMeter 起動ファイル jmeter.bat をダブルクリックして下さい jmeter.bat 正しく起動されていれば コマンドプロンプトと以下の通りの画面が表示されます テスト計画実際のテストシナリオを作成する場所 ワークベンチテストに使用しない要素を一時的保管 HTTP プロキシを動作させる場所 11 平成 18 年 10 月 30 日 1. スレッドグループの作成 JMeter のテスト実行計画を作成する場合 まずユーザ ( スレッドグループ ) を作成します テスト計画を選択して 右クリックします 追加 スレッドグループを選択します わかりやすい名前を付けます 実施すべきテストプランに沿ったスレッド数 ( ユーザ数 ) 等の設定をします 12 平成 18 年 10 月 30 日 6 Copyright 2006HPcorporatepresentation.Alrightsreserved.
2. デフォルト HTTP リクエストの作成 スレッド共通の HTTP リクエストのデフォルト値を設定エレメントの作成より設定します その他設定すべき設定エレメントがあれば設定します 作成したスレッドグループを選択して 右クリックします 追加 設定エレメント HTTP リクエスト初期値設定を選択します テスト対象のサーバ名 /IP を定義します 13 平成 18 年 10 月 30 日 3. サンプラーの作成 実際に HTTP リクエスト処理を行うものとして サンプラーを作成します 作成したスレッドグループを選択して 右クリックします 追加 サンプラー HTTP リクエストを選択します わかりやすい名前を付けます アクセス対象は 設定エレメントで設定してます ここでは 実際の HTTP リクエストのパス等のみ設定します 14 平成 18 年 10 月 30 日 7 Copyright 2006HPcorporatepresentation.Alrightsreserved.
4. リスナーの作成 テスト結果の表示と保存のためにリスナーを追加します リスナーは 各々のテストプランにおいて必要なものを設定します 作成したスレッドグループを選択して 右クリックします 追加 リスナー 統計レポートを選択します 結果をファイルに保存できます サンプラーの処理結果がそれぞれのリスナーに応じた形で動的に表示されます 15 平成 18 年 10 月 30 日 5. テストプランの保存 テストプランを実行する前に テストプランの保存をします メニューのファイル テスト計画を保存または ファイル テスト計画に名前をつけて保存を選択します わかりやすい名前をつけて保存します 16 平成 18 年 10 月 30 日 8 Copyright 2006HPcorporatepresentation.Alrightsreserved.
6. テストプランの実行 テストプラン実行開始の準備が完了後 テストプランの実行を開始します メニューの実行 開始を選択 または Ctrl + R を押します テストプランの実行後 テストが正常に行われているかどうかを確認するには 設定したリスナーを参照します 17 平成 18 年 10 月 30 日 7. 実行結果の確認 テストが終了したらリスナーにおいて テスト実行結果を確認します 追加 リスナー 統計レポートを選択します 18 平成 18 年 10 月 30 日 9 Copyright 2006HPcorporatepresentation.Alrightsreserved.
実行イメージ テスト計画スレッドグループ (3 スレッド 4 回 ) リクエスト初期値設定統計レポートスレッド Ramp-up 期間 19 平成 18 年 10 月 30 日 HTTP リクエスト ApacheJMeter 実践編 10 Copyright 2006HPcorporatepresentation.Alrightsreserved.
内容 1.JMeter のチューニング 2. タイマ 3. テストプランの自動生成 21 平成 18 年 10 月 30 日 JMeter のチューニング 問題 JMeter で数多くのスレッド ( クライアント ) を実行すると 容量不足になり以下のようなエラーが発生することがあります ERROR-jmeter.threads.JMeterThread:Testfailed! java.lang.outofmemoryerror:javaheapspace JMeter のチューニングが必要です! 起動スクリプト ($JMETER_HOME/bin/jmeter.bat) を編集します Java ヒープの大きさを大きくして下さい setheap=-xms256m -Xmx256m テストとマシンのスペックに応じてチューニングします 22 平成 18 年 10 月 30 日 11 Copyright 2006HPcorporatepresentation.Alrightsreserved.
タイマ JMeter がリクエストを送信するときデフォルトでは 間髪を入れずにリクエストを送信します タイマを利用することで それぞれの処理の間に間隔を入れることが出来ます 左フレームの スレッドグループ を選択した後 右クリックまたは 編集 メニューか追加 タイマを選択して 定数タイマ や 定数スループットタイマ 等を追加します 定数タイマ は 待ち時間をミリ秒で指定します 定数スループットタイマ は 1 分間に送出するリクエスト数で指定します 例 )60 を設定すると 1 秒間に 1 つのリクエストが送出されます 23 平成 18 年 10 月 30 日 タイマを使用したときの実行イメージ テスト計画スレッドグループ (1 スレッド 4 回 ) リクエスト初期値設定統計レポートスレッド タイマ HTTP リクエスト 24 平成 18 年 10 月 30 日 12 Copyright 2006HPcorporatepresentation.Alrightsreserved.
テストプランの自動生成 JMeter には ブラウザから行った操作をテスト計画に自動的に変換してくれる HTTP プロキシサーバ機能があります プロキシを設定 シナリオの実行 手順 1. スレッドグループの作成手順 2.HTTP リクエスト初期値設定エレメントの追加手順 3.HTTP プロキシサーバエレメントの追加手順 4.Web ブラウザのプロキシサーバを設定手順 5. テスト計画の記録手順 6. テスト計画の編集手順 7. リスナーの追加手順 8. テスト計画の保存手順 9. テストの実行 port:8080 port:80 25 平成 18 年 10 月 30 日 プロキシモードで動作 テストプランの 自動生成 テスト対象サーバ 性能試験 13 Copyright 2006HPcorporatepresentation.Alrightsreserved.
性能試験概要 性能試験を実施する時のフローの概要 1. 事前調査 ( 想定負荷 試験環境 試験項目 ) 2. 環境の準備 (HW SW 試験データ ) 3. 試験プラン作成と実施 4. 結果の分析と確認 ここで性能が出ないと大変です! 27 平成 18 年 10 月 30 日 性能試験での実例 実際のプロジェクトでの実例 (with 脚色 ) A さんは 下記のシステム用件で性能試験をすることになりました 応答時間は 2 秒以内 最大同時ユーザー数は 100 人 試験シナリオ ( ログイン 商品検索 カートに商品を入れる 購入 ログアウト ) 試験環境とシナリオは 完璧に準備しました ところで どのような試験をすればよいのだろう??? 最大同時ユーザが 100 人なので JMeter を用いて 100 スレッドで試験すれば良いだろう あまり多く実行すると危ないので とりあえず 実行回数は 1 人につき 1 回にしよう! そして 全てのリクエストの応答時間が 2 秒以内であればシステム要件を満たすことになる これで僕の仕事も終了だ! 試験開始! 28 平成 18 年 10 月 30 日 14 Copyright 2006HPcorporatepresentation.Alrightsreserved.
結果 応答時間がとんでもない値になってしまいました キャッシュが原因かなぁ!? もう一回実施しよう! あれ? 変わらないなぁ? あと もう一回実施する うんん 変わらないなぁ! やっぱ JMeter はだめだなぁ! 高いけど商用製品を買うしかない! 待ってください! JMeter は悪くありません なぜ このようなことになってしまったのでしょうか? 何が悪かったのでしようか? 29 平成 18 年 10 月 30 日 A さんが実施した試験とは? どのような試験を実施したことになるの? 100 人が同時に 下記シナリオを実施 ログイン 商品検索 カートに挿入 購入 ログアウト その上 100 人が 各操作を必死で休み無く実行 これってどんな負荷? 人気商品を特定の時刻に売り出した時のような負荷 30 平成 18 年 10 月 30 日 15 Copyright 2006HPcorporatepresentation.Alrightsreserved.
A さんが実施した試験の概要 テスト計画 スレッドグループ リクエスト初期値設定 統計レポート 連続実行 100 スレッド : : 同時実行 31 平成 18 年 10 月 30 日 A さんの試験の改善方法 テスト計画スレッドグループリクエスト初期値設定統計レポートスレッド Ramp-up 期間 : : 32 平成 18 年 10 月 30 日 16 Copyright 2006HPcorporatepresentation.Alrightsreserved.
負荷試験方法のセオリー 実際の試験では 何スレッドで試験をすれば良いのでしょうか? シナリオは何回実施すれば良いのでしょうか? よほど自信がある場合以外は 以下のように小さな負荷から試験を実施して下さい 1. 想定負荷の検討 2. 基礎データの取得 3. 小さな負荷試験 4. 想定負荷の負荷試験 5. 高負荷試験 高負荷で問題が発生した場合は 基礎データと比較することにより 解決の糸口を見つけることが出来ます 33 平成 18 年 10 月 30 日 想定負荷の検討 実際のプロジェクトなどでは 性能の目標値が無かったり 不明確であることが多々あります 実例 最大ユーザー数は 100 人 応答時間は 2 秒以内 同時ユーザ数は? ユーザー数は 100 人 秒間 50 個の処理 50 個の単位は? 最低 確認すべき項目 ユーザー数はシステムに登録される人数? それとも同時にシステムにアクセスする人数? JMeter で試験をする場合のスレッド数とは 同時アクセス数に対応します スループットの単位は HTTP リクエスト? それともシナリオ単位? JMeter での試験結果の集計は HTTP リクエスト単位で行われます 応答時間の目標値 34 平成 18 年 10 月 30 日 17 Copyright 2006HPcorporatepresentation.Alrightsreserved.
基礎データの取得 1 ユーザがシナリオを 1 回だけ実行した時のリクエストの応答時間を測定します 1.1 つのブラウザからシナリオを実行した時の応答時間の測定 2.JMeter から 1 スレッド 1 回のシナリオ リクエストの間隔 1 秒で実施し 各リクエストの応答時間を計測 何が分かるの? システムにおける最高の応答時間が分かります 1 の試験の結果が 応答時間の要件を満たしていない場合 これ以上試験をする必要はありません 早速 遅い原因を調査して下さい 2 の試験の結果が 1 の試験結果と大きく異なっている場合は JMeter の設定などを確認してください 35 平成 18 年 10 月 30 日 性能基礎試験 いよいよ負荷をかけていきます あせる気持ちを抑えて以下の順番で試験を実施しましょう 試験 A :1 多重複数回 (1 スレッド 100 シナリオ ) 応答時間が だんだん悪くなるようなことはありませんか? スループットを記録して下さい 試験 B:2 多重複数回 (2 スレッド 100 シナリオ ) 平均応答時間は どの程度悪くなりましたか? スループットは 試験 Aの 2 倍ぐらいの値になっていますか? 試験 C:4 多重複数回 (4 スレッド 100 シナリオ ) 平均応答時間は どの程度悪くなりましたか? スループットは 試験 Aの 4 倍ぐらいの値になっていますか? 36 平成 18 年 10 月 30 日 18 Copyright 2006HPcorporatepresentation.Alrightsreserved.
性能基礎試験って? 疑問? 試験 A 試験 B 試験 C を実施しましたが これらの試験は何のために行ったのでしょうか? 次にどのような試験をすれば良いのでしょうか? 基礎性能試験を実施した意味 システムの限界性能に対して 試験 A から試験 C による負荷がどの程度の負荷になっているかを見るために実施しています 分析方法 システムが限界性能に達したときに スループットの値や応答時間の値がどのように変化するかの傾向を知ることによって 試験 A から試験 C の負荷の程度を予想することが出来ます 37 平成 18 年 10 月 30 日 典型的な性能試験結果 18 スループットと応答時間 スループット (request/ 秒 ) 応答時間 ( 秒 ) 16 14 12 10 8 6 4 要求性能 4 8 16 12 5 15 12.5 2 0 2 1 0.50.6 0.7 1.2 0 5 10 15 20 25 30 クライアント ( スレッド ) 数 スループット理想性能スループット応答時間 基礎データ 1 スレッドで試験 1 秒間に 1 つのリクエストを送信 平均応答時間は 0.5 秒 38 平成 18 年 10 月 30 日 19 Copyright 2006HPcorporatepresentation.Alrightsreserved.
試験結果の例 スループット ( リクエスト / 秒 ) 応答時間 ( 秒 ) 9 8 7 6 5 4 3 限界性能 スループットと応答時間 性能の劣化 4 3.5 2 2 1.4 1 1 基礎データ 0.5 0.6 0 0 1スレッドで試験 0 1 2 3 4 5 6 7 8 9 1 秒間に1つのリクエストクライアント ( スレッド ) 数を送信 スループット理想性能スループット応答時間 8 6 4 平均応答時間は 0.5 秒 39 平成 18 年 10 月 30 日 性能試験のコツ シナリオの作成 各リクエストの間には間隔を入れる 各スレッドの開始時間をずらす スレッドグループの Ramp-up 時間は長めに設定する 基礎データの取得 最初に ブラウザから実行して見てください 期待する応答時間内で処理できていますか? 1 スレッドでシナリオを 1 回だけ実行して 各リクエストの応答時間が要件を満たしていることを確認してください 性能基礎試験 1 スレッド複数回の実行 2 スレッド 4 スレッドと 徐々に負荷をかけて下さい 実施している性能試験が 限界性能に対してどの程度の負荷を与えているかを把握しながら試験を実施して下さい 40 平成 18 年 10 月 30 日 20 Copyright 2006HPcorporatepresentation.Alrightsreserved.
性能試験のコツ : その 2 早めの性能試験のすすめ 出来れば プロトタイプの作成時や 開発時から負荷試験を実施することをお勧めします 単体機能の負荷試験も可能です 41 平成 18 年 10 月 30 日 ApplicationServer チューニングのヒント 21 Copyright 2006HPcorporatepresentation.Alrightsreserved.
基礎的なチューニング JVM のヒープメモリーの拡張 どのような時に拡張する必要があるの? OutOfMemory エラーの発生 java verbosegc でヒープの使用量を確認すると 最大値の 80% ぐらい使用している 設定 -Xmx でヒープメモリーの最大値を設定して下さい リクエストの通り道の確保 試験の多重度と同程度ありますか? AP サーバのスレッド数 JDBC コネクション数 43 平成 18 年 10 月 30 日 性能が出ない場合の対処 AP サーバの CPU の使用率が低い場合 データベースの応答時間の問題 データベースへのクエリに遅いクエリはありますか? Java アプリケーション内での共有リソースに対するロックの問題 データベースへのクエリの応答時間に問題がない場合は 調査してみて下さい AP サーバの CPU の使用率が高い場合 アプリケーション内で CPU を消費 ( 浪費 ) する処理の有無を調査して下さい 44 平成 18 年 10 月 30 日 22 Copyright 2006HPcorporatepresentation.Alrightsreserved.
AP サーバチューニングのヒント 性能が出ない場合 Java Xmx の設定はされていますか? AP サーバのスレッド数 JDBC コネクション数はリクエストの多重度と同程度確保されていますか? データベースの応答時間に問題はないですか? Java アプリケーション内で共有リソースのロックの問題は発生していませんか? 45 平成 18 年 10 月 30 日 まとめ 性能試験の重要性 ApacheJMeter 性能試験方法 AP サーバのチューニングのヒント 46 平成 18 年 10 月 30 日 23 Copyright 2006HPcorporatepresentation.Alrightsreserved.
付録 参考 URL URL ApacheJMeter htp://jakarta.apache.org/jmeter/ ApacheJakarutaProjectUserManual htp://jakarta.apache.org/jmeter/usermanual/index.html ApacheJakarutaProject ユーザマニュアル ( 日本語訳 ) htp://cgi0.biwa.ne.jp/~yabuta/study/jmeter/usermanual/ JMeter エンコード指定パッチ htp://testkei.secret.jp/blog/jablog/archives/cat163/java/jmeter/index.html 動的リクエストの利用 ( 複数のリクエストパラメータの利用方法 ) htp://wiki.apache.org/jakarta-jmeter/jmeterfaq#head-1680863678257fbcb85bd97351860eb0049f19ae 書籍 月刊 JavaWorld( ジャバワールド )2005 年 12 月号 48 平成 18 年 10 月 30 日 24 Copyright 2006HPcorporatepresentation.Alrightsreserved.
関連 URL 日本ヒューレットパッカード オープンソース &Linux htp://www.hp.com/jp/linux/ 49 平成 18 年 10 月 30 日 エレメント : スレッドグループ クライアントの設定 全てのテストプランはこれから始まります この下にサンプラーやリクエストといったエレメントを追加していくことで様々な設定を行います 名前 : テストケース名 サンプラーエラー後のアクション : サンプラー実行中にエラーが発生した際のアクション続行 ( デフォルト )/ スレッド停止 / テスト停止 スレッド数 :( デフォルト 1) JMeter が生成するクライアント数 ( アクセスユーザ数 ) Ramp-Up 期間 ( 秒 ):( デフォルト 1) 全てのスレッドが起動するまでの時間 ループ回数 :( デフォルト 1) 各スレッドにて実行するテストケースの回数 スケジューラ : チェックを入れると時間指定などの詳細な設定が可能 ( デフォルト OFF) 50 平成 18 年 10 月 30 日 25 Copyright 2006HPcorporatepresentation.Alrightsreserved.
Ramp-up 期間の設定について スレッドグループの Ramp-up 期間 ( 秒 ) とは? 最初のスレッドが起動してから 最後のスレッドが起動するまでの時間を指定します スレッド数秒以上の値を設定することをお勧めします 例えば スレッド数 3 で Ramp-up 期間が 6 秒 の場合は 6 3=2 秒間隔でスレッドが生成されます 2 秒 6 秒 スレッド 51 平成 18 年 10 月 30 日 プロキシサーバの使用 ファイヤーウォールやプロキシサーバ越しにテストする場合 ファイヤーウォールやプロキシサーバの名前やポート情報を JMeter の起動コマンドに与えて起動します jmeter.bat H [ プロキシサーバのホスト名 ] P[ ポート ] u[ ユーザ名 ] p[ パスワード ] port:8080 port:80 プロキシーサーバ テスト対象サーバ 52 平成 18 年 10 月 30 日 26 Copyright 2006HPcorporatepresentation.Alrightsreserved.
タイマ タイマを スレッドグループ に付け加えるか あるいは HTTP リクエスト 等に付け加えるかによって そのタイマの影響の範囲が異なります HTTP リクエスト に 定数タイマ をつけた例 この場合 タイマが適用されるのは リクエスト A のみです リクエスト B には タイマは適用されません したがって 右の例の場合は 以下のように動作します 実行 10 秒待機 リクエスト A リクエスト B スレッドグループ に 定数タイマ をつけた例 この場合は スレッドグループ 以下の全てのサンプラー ( この例では リクエスト A と リクエスト B ) との間で タイマによって指定された分だけ待機時間が発生します したがって 右の例の場合は 以下のように動作します 実行 10 秒待機 リクエスト A 10 秒待機 リクエスト B 53 平成 18 年 10 月 30 日 リクエストパラメータの文字化け 問題 問題 シナリオ作成の際 HTTP リクエストに日本語データを含むと文字化けを起こしてしまう 例 ) パラメータ 123456ABCabc あ と入力する リクエストパラメータが 123456ABCabc /b> と文字化けする 原因 URL エンコード & デコードは UTF-8 を使用しており 日本語に対応していない仕様 対策 以下のどちらかの対応をすることで本問題に対応することができます ただし オープンソースですので 参考程度とし 使用の際は個人責任となります サーバー側でもリクエスト エンコーディングを UTF-8 で揃える 修正モジュールの適用 (J@Blog) 詳細手順に関しては 別紙をご覧下さい 参考 URL:htp://testkei.secret.jp/blog/jablog/archives/cat163/java/jmeter/index.html 54 平成 18 年 10 月 30 日 27 Copyright 2006HPcorporatepresentation.Alrightsreserved.
HTTP 認証マネージャ HTTP 認証マネージャは HTTP 認証 (Basic 認証 ) を利用できます 追加 設定エレメント HTTP 認証マネージャを選択します 例えば htp://localhost/admin/ に HTTP の Basic 認証がかけられているとします また その認証 ID とパスワードがそれぞれ admin と admin だとします その場合は 上記のような設定すれば HTTP の Basic 認証をパスすることができます パスワード の部分は自動的に伏字になります 55 平成 18 年 10 月 30 日 動的リクエスト 3. 動的リクエストの利用 事前に登録しておいた複数のユーザをスレッド起動毎に動的に切り替えたい場合に ユーザ変数を利用すると大変便利です 1 人のユーザではなく 複数のリクエストパラメータとしてユーザを用いて負荷試験をする際に使用します パラメータ情報を記述した外部ファイルを読み込ませ 動的にユーザパラメータを切り替える方法を使います 手順としては ユーザパラメータと外部ファイルの利用となります この手順は JMeter の FAQ で紹介されています 詳しくは 下記 URL 先をご参考下さい JMeterFAQ How doiuseexternaldatafilestoinmytestscripts? htp://wiki.apache.org/jakarta-jmeter/jmeterfaq#head-1680863678257fbcb85bd97351860eb0049f19ae 56 平成 18 年 10 月 30 日 28 Copyright 2006HPcorporatepresentation.Alrightsreserved.
動的リクエスト 手順 1.JMeter の起動を起動して スレッドグループを作成します 手順 2. スレッドグループを選択し 前処理 ユーザパラメータを追加します 変数の追加 を選択して 変数を設定します 記述形式 :${_StringFromFile( ファイル名 )} 名前 user_id password ユーザ _1 ${_StringFromFile(userid.txt)} ${_StringFromFile(password.txt)} 57 平成 18 年 10 月 30 日 動的リクエスト 手順 3. スレッドグループを選択し サンプラー HTTP リクエストを追加します リクエストで送るパラメータの 追加 を選択して 変数を設定します 記述形式 :${ 名前 } 名前は 手順 2 のユーザパラメータの名前 名前 user_id password 値 ${user_id} ${password} 58 平成 18 年 10 月 30 日 29 Copyright 2006HPcorporatepresentation.Alrightsreserved.
動的リクエスト 手順 4.$JMETER_HOME/bin 以下にパラメータを記述したファイルを配置します $JMETER_HOME とは JMeter をインストールしたフォルダを示します ファイルの中身は テキスト形式で以下のような記述となります 日本語も OK です -user_id.txttaro jiro saburo -password.txtpass1 pass2 pass3 手順 5. テストを実行します ファイルの内容は スレッド起動毎に上から 1 行づつ読み込み 最後まで行くと最初のパラメータを再度読み込みます 上の例では START 1 回目 :taro/pass1 2 回目 :jiro/pass2 3 回目 :saburo/pass3 4 回目 :taro/pass1( 最初のパラメータ ) 59 平成 18 年 10 月 30 日 テストプランの自動生成 手順 1.JMeter の起動を起動して スレッドグループを作成します まず テスト計画 の中にスレッドグループを作成します テスト計画 を右クリックし 追加 スレッドグループを選択します テスト計画 の下に スレッドグループ が追加されます 60 平成 18 年 10 月 30 日 30 Copyright 2006HPcorporatepresentation.Alrightsreserved.
テストプランの自動生成 手順 2.HTTP リクエスト初期値設定エレメント 共通設定がある場合は スレッドグループにあらかじめ追加しておきます スレッドグループ上で右クリックした後 追加 設定エレメントより HTTP リクエスト初期値設定を追加します 61 平成 18 年 10 月 30 日 テストプランの自動生成 手順 3.HTTP プロキシサーバエレメント ワークベンチ上で右クリックした後 追加 NonTest エレメントより HTTP プロキシサーバを追加します 62 平成 18 年 10 月 30 日 31 Copyright 2006HPcorporatepresentation.Alrightsreserved.
テストプランの自動生成 手順 3.HTTP プロキシサーバエレメント ポートの指定 JMeter がプロキシサーバとしてリクエストを受け付けるポート番号を指定します ( デフォルトは 8080 番 ) テスト計画に挿入するパターンと 除外するパターンの指定テスト計画に必要な URL と 除外したい URL のパターンを指定します URL の指定は Perl 形式の正規表現を用います [ テスト計画に挿入する URL パターンの例 ] *index.jsp [ テスト計画から除外する URL パターンの例 ] 画像ファイル :*.gif や *.jpg や *.png など CSS ファイル :*.css Java スクリプト :*.js 63 平成 18 年 10 月 30 日 テストプランの自動生成 手順 4.Web ブラウザのプロキシサーバの設定をします JMeter がインストールされているマシンのブラウザのプロキシサーバの設定をします 例えば InternetExplorer であれば ツール インターネットオプション 設定 LAN の設定より行えます 入力欄 ポート には HTTP プロキシサーバ詳細設定画面で入力したのと同じポート番号を指定してください [InternetExplorer のプロキシ設定 ] LAN にプロキシサーバを使用するにチェックを入れます アドレスは 自分自身のアドレス (127.0.0.1) ポートは HTTP プロキシサーバで設定した値を入れます ここでは 8080 番 64 平成 18 年 10 月 30 日 32 Copyright 2006HPcorporatepresentation.Alrightsreserved.
テストプランの自動生成 手順 5. テスト計画の記録 HTTP プロキシサーバ画面の 開始 ボタンを押すと JMeter がプロキシサーバとして動作し始めます 65 平成 18 年 10 月 30 日 テストプランの自動生成 手順 5. テスト計画の記録 手順 4 にてプロキシの設定を行ったブラウザにて 実際にテスト対象ページを閲覧 操作します 注意点 1.URL にミスがあったり余分なページを閲覧してしまった場合は 手動で修正や削除が可能です 2.Web ブラウザによる巡回が終わったら JMeter の HTTP プロキシサーバ で [ 停止 ] ボタンをクリックして記録を終了します もし 停止する前にブラウザを閉じてしまうとその動作も記録されてしまいます 66 平成 18 年 10 月 30 日 33 Copyright 2006HPcorporatepresentation.Alrightsreserved.
テストプランの自動生成 手順 5. テスト計画の記録 プロキシサーバ を停止させ テスト計画が記録されていることを確認します プロキシサーバ の起動後から 停止 ボタンを押し プロキシサーバ を停止します テスト計画の スレッドグループ 以下に結果が組み込まれているのが確認できます 67 平成 18 年 10 月 30 日 テストプランの自動生成 手順 6. テスト計画の編集 自動的に追加された スレッドグループ 下の HTTP リクエスト に余分なものがある場合は そのリクエストを右クリックして [ 削除 ] を選択します リクエストをクリックすれば URL の修正などが行えます CGI などの動的コンテンツで サーバに渡すパラメータがある場合はここで指定を行います 68 平成 18 年 10 月 30 日 34 Copyright 2006HPcorporatepresentation.Alrightsreserved.
テストプランの自動生成 手順 7. リスナーの追加 試験結果を見るために 必要なリスナーを追加します ここでは [ グラフ表示 ] と [ 統計レポート ] のリスナーを追加しました 手順 8. テスト計画の保存 作成したテスト計画を保存します 69 平成 18 年 10 月 30 日 テストプランの自動生成 手順 9. テストの実行 スレッドグループ の [ スレッド数 ] や [ ループ回数 ] などの値を調整してから実行します また 実行結果をクリアするには 実行 メニューの 全て消去 を選択します 70 平成 18 年 10 月 30 日 35 Copyright 2006HPcorporatepresentation.Alrightsreserved.
スループットとユーザ数の関係 例えば スループットの目標値が 100 リクエスト / 秒である場合 JMeter でこの負荷を実現するにはどのような試験をすればよいのでしょうか? 100 スレッドで実行する場合は? 各リクエストが 1 秒おきに実行されるように設定します 定数スループットタイマー で 60req/ 分に設定します 200 スレッドで実行する場合は? 各リクエストが 2 秒おきに実行されるように設定します 定数スループットタイマー で 30req/ 分に設定します 50 スレッドで実行する場合は? 1 秒で 2 つのリクエストが実行されるように設定します 定数スループットタイマー で 120req/ 分に設定します thread このようにスレッド数とリクエストの間隔を調整します 1 秒 リクエスト 71 平成 18 年 10 月 30 日 試験を実施する前に 注意 各試験の前には以下のような事前試験を実施して下さい 試験前の事前処理 測定するシナリオを複数回実行する 理由 システムが保持しているキャッシュに値を入れたり Java のコードのコンパイル動作を事前に実施するため 注意 試験時にかける負荷に合わせた事前処理をすることをお勧めします 72 平成 18 年 10 月 30 日 36 Copyright 2006HPcorporatepresentation.Alrightsreserved.
37 Copyright 2006HPcorporatepresentation.Alrightsreserved.