「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>Apache Jmeter]] * 目次 [#o95035a9] #contents *概要 [#ecd5edb4] -各種の[[設定>#u143e4d3]]方法と負荷テストの実施[[手順>#af7a6971]]についてまとめる。 -必要に応じて、[[スクリプト修正>#d6fa2a67]]を行う。 *設定 [#u143e4d3] **HTTPリクエスト [#v288a329] HTTPリクエストの[[サンプラーを追加>Jmeter用語#q4e53b30]]して使用する。 ***プロパティ [#w88f5be9] 以下のプロパティを設定。 -名前~ HTTPリクエストの名前(ID?)。 -コメント~ HTTPリクエストのコメント。 -Webサーバ --サーバ名またはIP~ テストするサーバ名またはIPアドレス(http:// は書くとエラーになるので注意) --ポート~ http なら 80、https なら 443など。 -プロトコル~ HTTP(既定値)/HTTPS/FILEのいずれか。 -メソッド~ GET(既定値), POST, HEAD, TRACE, OPTIONS, PUT, DELETE, PATCH -パス --/ から始まる(サーバ名またはIPアドレスを除いた)パス --パスはURLエンコードされないので注意(URLエンコードされたものを指定)。 --クエリ・ストリングを付加したい場合は 後述の「リクエストで送るパラメータ」に記載。 --フルパスの場合、サーバ名またはIP、ポート、プロトコル、クエリ・ストリングは無視される。 -Timeouts(millisecond) --Connect~ 接続タイマー --Response~ 応答タイマー。 -HTTPリクエスト --Implementation ---Java, HttpClient3.1, HttpClient4(既定値). ---既定値は Jmeter の jmeter.httpsampler プロパティの値にも依存。 --Content encoding ---(POST, PUT, PATCH, FILE に対して)使われるContent encoding。 ---HTTP の Content-Encoding ヘッダには影響しない。 --KeepAliveを有効にする ---Jmeter に Connection: keep-alive ヘッダをセットさせる。 ---Apache HttpComponents の HttpClient 実装であれば正しく動作する。 --multipart/form-data ---Use multipart/form-data for POST~ multipart/form-data もしくは application/x-www-form-urlencoded を使った POST リクエストを使用。 ---Browser-compatible headers~ multipart/form-data を使う際、Content-Type および Content-Transfer-Encoding ヘッダを使わず、Content-Disposition ヘッダだけを送る。 --リクエストで送るパラメータ~ クエリ・ストリングとして送るパラメータを指定する。 --リクエストと一緒に送信されるファイル~ アップロードするファイルを指定する。 --Redirect ---[[自動リダイレクト>#b81b0604]] ---[[リダイレクトに対応>#qa3e7d60]] -Proxy Server --サーバ名またはIP --ポート番号 --ユーザー名 --パスワード -Embedded Resources from HTML Files(画像, JavaScript, CSS等) --全てのイメージとアプレットを繰り返しダウンロードする(HTMLファイルのみ)~ HTML ファイルをパースし、埋め込みリソースをGET。 --Use concurrent pool.~ 同時並行コネクションプールを使う。 --Size:~ 同時並行コネクションプールのサイズ --URLs must match~ GETする埋め込みリソースのURLとしてマッチさせたいものを正規表現で指定。 -Source address(HTTPClient 実装における HTTP リクエストのみ) --ソースアドレスの型~ ソースアドレスの値を区別するために型を選択する。 --ソースアドレスの値~ ・・・ -オプションタスク --モニタとして使用~ モニタ結果リスナーで使用する。 --Save response as MD5 Hash? ---応答が結果に格納されなくなる。 ---代わりに、32 文字の MD5 ハッシュが格納される。 ***HTTPリクエスト初期値設定 [#w1b1fffd] -[[設定できる項目はHTTPリクエストと同じ>#w88f5be9]]。 -この画面で[[HTTPリクエストの共通パラメタ>#w88f5be9]]を設定できる。 -テスト環境でスクリプトを作成して、本番環境に負荷をかける場合などに有用。 -[[「設定エレメント」の「HTTPリクエスト初期値設定」>Jmeter用語#z1e392de]]を追加する。 **認証設定 [#x82cfa0e] -以下の認証がある場合、 --Basic --Digest --NTLM --Kerberos -[[「設定エレメント」の「HTTP認証マネージャ」>Jmeter用語#z1e392de]]を追加する。 ***設定項目 [#qc9397c8] -基底URL -ユーザー名 -パスワード -Mechanism ***Mechanism=KERBEROSの場合 [#n63cf6ac] 追加で、以下の設定が必要。 -system.properties --java.security.krb5.conf --java.security.auth.login.config -*.conf --krb5.conf(Kerberos 構成ファイル) --jaas.conf(JAASログイン構成ファイル) -参考 --IBM Knowledge Center - 構成ファイルとポリシー・ファイル~ https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_72/rzaha/rzahajgssconfigs.htm **その他の設定 [#hcd8c939] ***Cookieの有効化 [#y2dda4a3] [[「設定エレメント」の「HTTP クッキーマネージャ」>Jmeter用語#z1e392de]]を追加する。 ***Cacheの有効化 [#i8414f68] [[「設定エレメント」の「HTTP Cache Manager」>Jmeter用語#z1e392de]]を追加する。 ***プロキシ設定 [#edd4e9fd] 自身がプロキシとして動作するが、~ 更に、プロキシを経由させる場合、起動オプションでプロキシ設定を行う。 -Apache JMeter - User's Manual: Getting Started~ > 1. Getting Started > 1.4 Running JMeter~ http://jmeter.apache.org/usermanual/get-started.html#proxy_server jmeter -H my.proxy.server -P 8000 -u username -a password jmeterWithProxy.bat的なbatファイルを準備しておくと吉。~ なお、この時、jmeter.batへのパスを、フルパスで記述しておくこと。 *手順 [#af7a6971] **Jmeterの起動 [#ga2d7236] 以下に注意して、jmeter.batを起動する。 ***Java関係のパラメタ設定 [#l52838b5] 必要に応じて、jmeter.batに、~ [[Java関係のパラメタ設定>Jmeterのインストール#c980883f]]を行う。 ***管理者実行 [#pe450ead] jmeter.batを右クリックして、~ 「管理者として実行」を選択する。 ***プロキシ設定 [#na76e4a3] 必要に応じて、jmeter.batに、~ [[プロキシ設定>#edd4e9fd]]のコマンドライン引数を指定する。 **初期設定 [#h4c1274c] ***スレッドグループの追加 [#d666189d] [[テスト計画に、スレッドグループを追加>Jmeter用語#rd4bf7fa]]。 ***[[HTTPリクエスト初期値設定>#w1b1fffd]] [#qf6c402e] -ここでは、スレッドグループ以下に当該「設定エレメント」を追加する。 -最低限、Webサーバ(サーバ名またはIP、ポート)項目の設定を行っておく。 ***[[HTTP認証の有効化>#x82cfa0e]] [#a169b960] -HTTP認証がある場合があるので、有効化しておく。 -なお、ここでは、スレッドグループ以下に当該「設定エレメント」を追加する。 ***[[Cookieの有効化>#y2dda4a3]] [#y3851871] -大概のWebアプリには、以下が使用されているので有効化しておく。 --Session Cookie --Cookie認証Ticket -なお、ここでは、スレッドグループ以下に当該「設定エレメント」を追加する。 ***[[Cacheの有効化>#i8414f68]] [#w5dbee82] -大概のWebサイトは静的コンテンツをキャシュ可能にしているので有効化しておく。 -なお、ここでは、スレッドグループ以下に当該「設定エレメント」を追加する。 **ワークベンチ設定 [#bf5c39d9] ***保存の設定 [#j66d5736] ワークベンチのSave Workbench チェック・ボックスをチェックにする。 ***[[HTTPプロキシサーバ(Test Script Recorder)>Jmeter用語#e9c7b928]] [#w59b7fe9] -追加~ 負荷テストのワークロード(電文)のキャプチャを行うので、~ ワークベンチに、Jmeterの「[[HTTPプロキシサーバ(Test Script Recorder)>Jmeter用語#e9c7b928]]」機能を追加する。 -設定 --ポート番号は既定で「8888」になっているので、必要に応じて変更する。 --Request Filteringタブ ---「挿入するパターン」に記録対象となるURLを正規表現で追加する。 ---例えば、ホスト名は"local\.com:80/.*"、拡張子は".*\.html"などと指定する。 --Test Plan Creationタブ > Test plan contents ---記録先を指定するため、~ [対象となるコントローラー]ドロップダウンリストから「テスト計画 > スレッドグループ名」を選択する。 ---また、ページ単位でリクエストをまとめて記録するようにするため、~ (Simple Controller以下に、[[HTTPリクエストのサンプラー>#v288a329]]が並ぶようになる)~ [グループにする]ドロップダウンリストから「新規コントローラーへ各グループを置く」を選択する。 --リスナーの追加 ---プロキシサーバー機能が記録したワークロードを確認するためにリスナーを追加する。 ---HTTPプロキシサーバ(Test Script Recorder)に、[[「結果をツリーで表示」リスナー>Jmeter用語#h6cb67cf]]を追加する。 -開始 --設定画面中にある開始ボタン ( [▶] ) を押下する。 --HTTPプロキシサーバ(Test Script Recorder)が開始したかどうかは「netstat -a」で確認できる。 **Webアプリの電文を記録 [#fb53f302] -ココまで来たら、一度、テスト計画(テスト計画-nnnnnn.jmx)を保存しておく。 -なお、この*.jmxファイルは、backupフォルダに10世代文自動的に保持される。 ***ブラウザの設定 [#h21bcbcd] -プロキシ設定で[[Jmeterプロキシ>#w59b7fe9]]を設定する。 -閲覧履歴(キャッシュ)を削除しておく。 -その他、必要に応じて、各種ブラウザ設定を~ サイトユーザのメジャー設定に合わせて変更しておく。 ***[[HTTPプロキシサーバ(Test Script Recorder)>#w59b7fe9]]の開始 [#q4e8e3d3] [[HTTPプロキシサーバ(Test Script Recorder)>#w59b7fe9]]を開始しておく。 ***ブラウザを操作してワークロードを記録 [#obe10219] -ブラウザを操作してワークロードを記録する。 -記録の度に、Simple Controller以下に、[[HTTPリクエストのサンプラー>#v288a329]]が追加されていく。 -このため、[[「結果をツリーで表示」リスナー>Jmeter用語#h6cb67cf]]で都度 電文を確認しつつ、以下を行う。 --不要な[[HTTPリクエストのサンプラー>#v288a329]]を削除。 --必要な[[HTTPリクエストのサンプラー>#v288a329]]の階層構造の整理。 --Simple Controller、[[HTTPリクエストのサンプラー>#v288a329]]のリネーム。 -以下は、当該PukiWikiのページの新規作成と編集(削除)の操作をスクリプト化した例である。~ PukiWikiの仕組みを知らなかったため、ソレを理解しつつ、スクリプトの整理を行った。 #ref(script.png,left,nowrap,採取したワークロードを再現するスクリプト) ***[[HTTPプロキシサーバ(Test Script Recorder)>#w59b7fe9]]の停止 [#b047a744] -[[HTTPプロキシサーバ(Test Script Recorder)>#w59b7fe9]]を停止、 -再び、テスト計画を保存しておく(テスト計画-nnnnnn.jmx)。 ***ブラウザの設定を元に戻す [#s0f96990] [[先程のブラウザ設定>#h21bcbcd]]を元に戻しておく。 **[[スクリプト修正>#d6fa2a67]] [#y811a01c] 必要に応じて、[[スクリプト修正>#d6fa2a67]]を実施する。 **テスト計画を実行する。 [#a9dd06f7] ***多重度 [#t9513523] 多重度の設定については、[[コチラ>Jmeter用語#s4c36420]]を参照のこと。 -1多重で、[[デバッグ・検証>#a60feb95]]、機能テストを行う。 -n多重で、[[負荷テスト>#pef9e793]]を行う。 ***デバッグ・検証 [#a60feb95] -再生ボタンを押して、デバッグ実行してみる。 #ref(debug.png,left,nowrap,スクリプトのデバッグ実行) -正常に動作しない場合、以下の方法でデバッグする。 -- -問題を発見した場合、[[スクリプト修正>#y811a01c]]で対応する。 ***機能テスト・負荷テスト [#pef9e793] [[デバッグ・検証>#a60feb95]]が完了したら、機能テスト・負荷テストを実施できる。 *スクリプト修正 [#d6fa2a67] スクリプト修正には、HTTPとアプリケーションの知識が必要になる。 **可変値の追跡 [#ue27be32] リクエスト → レスポンス → リクエストと持ち回る値を追跡し変数化する。 ***抽出系の後処理で抽出 [#re7c2573] [[抽出系の後処理>Jmeter用語#p2b49fc8]]を使用してレスポンスから値を抽出する。 **テストデータの組込 [#a78bc4a1] 変数に、CSVファイルなどを使用してテストデータを組み込む。 **クライアントのCookie操作 [#k1b5278d] BeanShell PreProcessorにCookie操作の処理を記述する。 *注意事項 [#gc15e292] **HTTPS対応 [#kf3ada0f] キャプチャの際、ブラウザに[[Jmeterプロキシ>#w59b7fe9]]の[[証明書]]をインストールする。 -HTTSを使用する場合、[[Jmeterプロキシ>#w59b7fe9]]の[[証明書]]を、~ クライアント端末の「信頼されたルート証明機関」にインストールする。 -[[Jmeterプロキシ>#w59b7fe9]]の[[証明書]]は、~ 「HTTPプロキシサーバ(Test Script Recorder)」の開始後に、~ 「Jmeterを解凍したフォルダ\bin\」以下に生成される。 **リダイレクト [#i51d7622] ***自動リダイレクト [#b81b0604] -利用中の http プロトコルハンドラがリダイレクトに自動追従するようにする。 -自動リダイレクトの応答は、Jmeterのサンプルとして追加されない。 ※ 自動追従したリクエストにはクッキーが送信されないので注意。 ***リダイレクトに対応 [#qa3e7d60] -「[[自動リダイレクト>#b81b0604]]」が無効の場合、~ 応答がリダイレクトかどうかを チェックし、そうであればそれに従う。 -この場合のリダイレクトの応答は、Jmeterのサンプルとして追加される。 *参考 [#c667a15a] ---- Tags: [[:テスト]], [[:ツール類]]