[Jmeter]_03_シナリオ作成-02_HTTPヘッダ編 [Jmeter]
HTTPヘッダ編。
前回の通り、HTTPヘッダマネージャはHTTPリクエストオブジェクトの子として配置する。
Content-Type、Accept-Languageなどありますが、
基本的にはキャプチャ時から変える必要ないかな。
変える必要がある(場合がある)のは主に以下2パラメータ。
■User-Agent
通称UA。何を用いてアクセスしたかをサーバに連絡するパラメータ。
このパラメータを変更することで、用いたブラウザ種類やPC/スマホの偽装が可能。
■Referer
上図だと買える必要ないですが、.phpの後ろに?r=XXXXXXなどとなっている場合。
その時は、正規表現でrの値を抽出し、変数で入力する必要あり。
次回、正規表現抽出編。
前回の通り、HTTPヘッダマネージャはHTTPリクエストオブジェクトの子として配置する。
Content-Type、Accept-Languageなどありますが、
基本的にはキャプチャ時から変える必要ないかな。
変える必要がある(場合がある)のは主に以下2パラメータ。
■User-Agent
通称UA。何を用いてアクセスしたかをサーバに連絡するパラメータ。
このパラメータを変更することで、用いたブラウザ種類やPC/スマホの偽装が可能。
■Referer
上図だと買える必要ないですが、.phpの後ろに?r=XXXXXXなどとなっている場合。
その時は、正規表現でrの値を抽出し、変数で入力する必要あり。
次回、正規表現抽出編。
[Jmeter]_03_シナリオ作成-01_HTTPリクエスト編 [Jmeter]
まずは前回のおさらい+αから。
キャプチャが終わった段階で、Jmeterは以下のような構成となっている。
スレッドグループ_01
┣トランザクションコントローラ_01_PV01
┃ ┣HTTPリクエスト_01_PV01_001
┃ ┃ ┗HTTPヘッダマネージャ_01_PV01_001
┃ ┗HTTPリクエスト_01_PV01_002
┃ ┗HTTPヘッダマネージャ_01_PV01_002
┣トランザクションコントローラ_01_PV02
:
① スレッドグループ
1つのシナリオ ≒ オペレーション群。
Top => 商品詳細 => カート投入 => カート画面 などの一連の画面遷移を指す。
② トランザクションコントローラ
ユーザの1オペレーション ≒ 1ページビュー(PV)。
上述の例では「商品詳細」の表示、「カート投入」ボタンの押下などが該当する。
③ HTTPリクエスト
ユーザオペレーションに伴うHTTP通信。
通常(※1)、1PVに1つ以上存在。
「.php」「.do」等の動的コンテンツの実行、
「.js」「.css」「.jpg」等の静的コンテンツの取得(※2)などが該当。
※1 タブ切替などのHTTP通信を伴わないオペレーションも存在する。
Jmeterではこれは再現せず、そのオペレーションに要した時間を
定数タイマで再現するに留める
※2 ※1でも記載の通り、クライアントサイドの処理はJmeterで再現しない。
ただし、次のリクエストに必要なパラメータをjs等で生成している場合、
Jmeterでも同様にパラメータの作りこみが必要となる可能性がある。
④ HTTPヘッダマネージャ
HTTPリクエストに付与するヘッダ情報。
今回は、③の設定について記載する。
キャプチャにて取得した場合、以下の通りパラメータがある程度記入されている。
赤枠で示した部分が主な設定すべき項目であるが、それらの詳細は以下の通り。
■Encode?の使用例
日本語や全角文字を送信する時、通常は下図「デコード前」のように
人間にわかりにくい文字にエンコードされた状態で送信されます。
ですが、パラメータを色々変更する時にこのエンコード後の状態だとわかりにくいです。
※読める人もいるでしょうが、私はデコーダ必須でゴザイマス…
このチェック項目は、この不便さを解消してくれる項目なのです。
■等号含む?の使用例
下表のようなパラメータをGETメソッドでリクエストする場合を考えます。
このとき、リクエストは以下のようになります。
http://localhost:9999/sample.php?user=id01&pass=
次は、memberPassのCheckedをはずしてみます。
このとき、リクエストは以下のようになります。
http://localhost:9999/sample.php?user=id01&pass
アプリケーションによっては値が存在しない時に「=」を含めない方がよいことがあるため、
必要に応じて本項目のチェックをはずしてください。
次回はHTTPヘッダ編。
キャプチャが終わった段階で、Jmeterは以下のような構成となっている。
スレッドグループ_01
┣トランザクションコントローラ_01_PV01
┃ ┣HTTPリクエスト_01_PV01_001
┃ ┃ ┗HTTPヘッダマネージャ_01_PV01_001
┃ ┗HTTPリクエスト_01_PV01_002
┃ ┗HTTPヘッダマネージャ_01_PV01_002
┣トランザクションコントローラ_01_PV02
:
① スレッドグループ
1つのシナリオ ≒ オペレーション群。
Top => 商品詳細 => カート投入 => カート画面 などの一連の画面遷移を指す。
② トランザクションコントローラ
ユーザの1オペレーション ≒ 1ページビュー(PV)。
上述の例では「商品詳細」の表示、「カート投入」ボタンの押下などが該当する。
③ HTTPリクエスト
ユーザオペレーションに伴うHTTP通信。
通常(※1)、1PVに1つ以上存在。
「.php」「.do」等の動的コンテンツの実行、
「.js」「.css」「.jpg」等の静的コンテンツの取得(※2)などが該当。
※1 タブ切替などのHTTP通信を伴わないオペレーションも存在する。
Jmeterではこれは再現せず、そのオペレーションに要した時間を
定数タイマで再現するに留める
※2 ※1でも記載の通り、クライアントサイドの処理はJmeterで再現しない。
ただし、次のリクエストに必要なパラメータをjs等で生成している場合、
Jmeterでも同様にパラメータの作りこみが必要となる可能性がある。
④ HTTPヘッダマネージャ
HTTPリクエストに付与するヘッダ情報。
今回は、③の設定について記載する。
キャプチャにて取得した場合、以下の通りパラメータがある程度記入されている。
赤枠で示した部分が主な設定すべき項目であるが、それらの詳細は以下の通り。
名称エリア | ||
---|---|---|
設定項目 | 内容 | Note |
名前 | Jmeter上で表示する名前。 (左フレームの管理パネル、各リスナーなど) 実際のアクセス先URLと一致させる必要はない。 命名規則の観点から "PVXXX_YYY_ZZZ" などとした方が無難かと。 |
XXX … PV番号 YYY … PV内HTTPリクエスト通番 ZZZ … アクセス先URL |
コメント | コメント欄。 オペレーション内容など記載するのがよいか。 「Top画面から1つ目の商品ページを開く」など。 |
ご自由にどうぞ。 |
Webサーバエリア | ||
---|---|---|
設定項目 | 内容 | Note |
サーバ名 またはIP |
アクセス先サーバのホスト名またはIPを入力する。 上図では同一マシン内へのアクセスのため、 「localhost」を記載。 |
「http://」は必要アリマセンヨ。 |
ポート番号 | アクセス先サーバのポート番号を記載する。 | httpsだと443ダヨネ。 |
HTTPリクエストエリア | ||
---|---|---|
設定項目 | 内容 | Note |
Implementation | Jmeterプロセス⇔サーバ間の通信方法。 HttpClient4、HttpClient3.1、Javaから指定。 HttpClient4推奨。 |
理由は前項の通り。 |
プロトコル | 通信プロトコルを指定する。 | 大抵はhttpかhttps。 |
メソッド | 通信メソッドを指定する。 | 大抵はGETかPOST。 |
Content encoding |
エンコードの文字コードを指定。 | parametersエリアの 各パラメータに適用。 |
パス | アクセス先URLを記載。 | ホスト名(IP)以降のURL。 |
自動 リダイレクト |
チェック時、リダイレクトに対応。 サーバからHTTPレスポンスコード3XX が返却された場合、 自動で次のリクエストを送付する。 |
ただし、各リスナーには レスポンスコード3XXの リダイレクションレスポンス (と対応するHTTPリクエスト) は記録されません。 |
リダイレクト に対応 |
チェック時、リダイレクトに対応。 サーバからHTTPレスポンスコード3XX が返却された場合、 自動で次のリクエストを送付する。 |
自動リダイレクトと違い、 リスナーに途中のリクエスト /レスポンスも記載される。 |
KeepAliveを 有効にする |
チェック時、HTTPヘッダに含める 「Connection」の値を「Keep-Alive」とする。 |
チェックしない場合は 「Close」となる。 |
Use multipart /form-data for POST |
Parameters部分を multipart/form-dataで送信。 |
ファイルアップロードなど 実行するときにチェック。 |
Browser -compartible headers |
multipart/form-data 使用時、 HTTPヘッダ 「Content-Disposition」のみを送信。 |
HTTPヘッダ 「Content-Type」、 「Content-Transfer-Encoding」 は不使用に。 |
Parametersエリア | ||
---|---|---|
設定項目 | 内容 | Note |
名前 | パラメータ名。 基本的にキャプチャ後は変えない。 |
追加することはあるかも。 |
値 | パラメータの値。 この部分を正規表現抽出したり、 CSV読込したりすることが多い。 |
固定値なのか、 システム変動値なのか、 ユーザ変動値なのか 見極めるのがキモ。 |
Encode? | チェック時、「値」をエンコードして送信。 | 以下に使用例を書いたよ。 |
等号含む? | チェック時、リクエストに「=」を含む。 | これも以下に例を。 |
■Encode?の使用例
日本語や全角文字を送信する時、通常は下図「デコード前」のように
人間にわかりにくい文字にエンコードされた状態で送信されます。
ですが、パラメータを色々変更する時にこのエンコード後の状態だとわかりにくいです。
※読める人もいるでしょうが、私はデコーダ必須でゴザイマス…
このチェック項目は、この不便さを解消してくれる項目なのです。
■等号含む?の使用例
下表のようなパラメータをGETメソッドでリクエストする場合を考えます。
名前 | 値 | 等号含む? |
---|---|---|
memberId | 0001 | Checked |
memberPass | Checked |
このとき、リクエストは以下のようになります。
http://localhost:9999/sample.php?user=id01&pass=
次は、memberPassのCheckedをはずしてみます。
名前 | 値 | 等号含む? |
---|---|---|
memberId | 0001 | Checked |
memberPass |
このとき、リクエストは以下のようになります。
http://localhost:9999/sample.php?user=id01&pass
アプリケーションによっては値が存在しない時に「=」を含めない方がよいことがあるため、
必要に応じて本項目のチェックをはずしてください。
次回はHTTPヘッダ編。
[Jmeter]_02_シナリオキャプチャ-02_キャプチャ編 [Jmeter]
実際にキャプチャする。
①サンプルページへアクセス。
②テキストボックスに文字を入力し、SUBMITボタンを押下。
Jmeterでのキャプチャ結果は以下の通り。
2回分のアクションが記録されている。(青枠内、上述①と②のアクション)
前回設定で[Put each group in a new transaction controller]を選択しているため、
アクション毎にトランザクションコントローラを作成し、
その配下にhttpリクエストを格納している。
さらに、httpリクエスト毎にそのHTTPヘッダを管理するマネージャを付与している構成だ。
①HTTPリクエスト
トランザクションコントローラ:HTTPリクエストは通常1:Nの関係となる。
ユーザが行う「1ページを表示する」というアクションに対し、
ページは「.php」「.do」等の動的コンテンツ、
「.js」「.css」「.jpg」等の静的コンテンツ
という複数の要素によって構成されている。
HTTPリクエストはそれらの構成要素を1つずつ取得するため、
構成要素の個数分のリクエストを発行する必要がある。
②HTTPヘッダマネージャ
HTTPリクエスト:HTTP ヘッダマネージャは1:1の関係。
トランザクションコントローラの設定箇所には以下の2つがある。
■「Generate parent sample」
Jmeter実行結果の表示方法についてのパラメータ。
チェックを入れるとページビュー毎にレスポンスタイムを集計するようになる。
チェック推奨。
■「Include duration of timer and pre-post processors in generated sample」
レスポンスタイム集計についてのパラメータ。
チェックを入れるとリクエスト生成の前処理、
タイマによるスリープウェイト時間等の後処理もレスポンスタイムの中に計上してしまう。
特に理由がない限り、チェックしてはいけない項目。
結果比較さんぷる。
両方チェックなし。
両方チェックあり。
上2図の通り、
①表示される結果の構成が異なる
後者はトランザクションコントローラとHTTPリクエストが親子関係に。
②レスポンスタイムが異なる
後者は定数タイマ(5000[ms]を設定)の値が加算されている。
上述の通りキャプチャしたい画面にアクセスしてJmeterに記録をする工程を繰り返し、
シナリオスケルトンを組み立てていく。
次回、シナリオ作成編へ。
========================================
キャプチャ編では、前回事前準備設定をしたInternetExplorerではなく、
FireFoxを使用しています。
すみませんでした。
IEの設定変えるとメインブラウザであるChromeにも影響あり、
ポート8080に常にプロキシ立てておかないとロクにブラウジングもできない始末…
プロキシ設定を毎回変えるのは面倒なので、影響を受けないFireFoxでキャプチャします。
以下、キャプチャ設定方法です。
①ブラウザを起動し、右上の三本線のアイコンをクリック後、「オプション」を選択
②左側のフレームから「詳細」を選択してから「ネットワーク」タブを選択、「接続設定」をクリック。
なお、キャッシュの削除はこの画面で「今すぐ消去」をクリック。
③手動でプロキシを設定する(M)にチェックを入れ、下図の通り設定しOKボタンをクリック。
①サンプルページへアクセス。
②テキストボックスに文字を入力し、SUBMITボタンを押下。
Jmeterでのキャプチャ結果は以下の通り。
2回分のアクションが記録されている。(青枠内、上述①と②のアクション)
前回設定で[Put each group in a new transaction controller]を選択しているため、
アクション毎にトランザクションコントローラを作成し、
その配下にhttpリクエストを格納している。
さらに、httpリクエスト毎にそのHTTPヘッダを管理するマネージャを付与している構成だ。
Jmeterオブジェクト | ブラウザ操作/内部動作 | Note |
---|---|---|
トランザクションコントローラ | ユーザの1アクション。 通常はページビュー(PV)の単位とイコール。 |
|
HTTPリクエスト | ページ表示のためにブラウザが行う、サーバとの通信内容。 | ① |
HTTP ヘッダマネージャ | HTTPリクエストに付与されるHTTPヘッダの情報。 User-Agent、Accept-Encodingなどがある。 |
② |
①HTTPリクエスト
トランザクションコントローラ:HTTPリクエストは通常1:Nの関係となる。
ユーザが行う「1ページを表示する」というアクションに対し、
ページは「.php」「.do」等の動的コンテンツ、
「.js」「.css」「.jpg」等の静的コンテンツ
という複数の要素によって構成されている。
HTTPリクエストはそれらの構成要素を1つずつ取得するため、
構成要素の個数分のリクエストを発行する必要がある。
②HTTPヘッダマネージャ
HTTPリクエスト:HTTP ヘッダマネージャは1:1の関係。
トランザクションコントローラの設定箇所には以下の2つがある。
■「Generate parent sample」
Jmeter実行結果の表示方法についてのパラメータ。
チェックを入れるとページビュー毎にレスポンスタイムを集計するようになる。
チェック推奨。
■「Include duration of timer and pre-post processors in generated sample」
レスポンスタイム集計についてのパラメータ。
チェックを入れるとリクエスト生成の前処理、
タイマによるスリープウェイト時間等の後処理もレスポンスタイムの中に計上してしまう。
特に理由がない限り、チェックしてはいけない項目。
結果比較さんぷる。
両方チェックなし。
両方チェックあり。
上2図の通り、
①表示される結果の構成が異なる
後者はトランザクションコントローラとHTTPリクエストが親子関係に。
②レスポンスタイムが異なる
後者は定数タイマ(5000[ms]を設定)の値が加算されている。
上述の通りキャプチャしたい画面にアクセスしてJmeterに記録をする工程を繰り返し、
シナリオスケルトンを組み立てていく。
次回、シナリオ作成編へ。
========================================
キャプチャ編では、前回事前準備設定をしたInternetExplorerではなく、
FireFoxを使用しています。
/ |
i IEでキャプチャすると i
i 言ったばかりなのに…… /
i スマン /
ド、 ありゃウソだった /
rァノ二`ヽ\ ,.. '" ,. ────────
{ ` イ-‐- 、巛\___ ,.. -<\_ / でも まあ
` T´r ___ i 弋 ~"ノ //\_><9 / その代わりにFireFoxでの
ヾi Vr::::::V ミミ ,r''/ ', ヽ、_ { i キャプチャ方法を載せとくから
ト、‘== ' / r‐ '" ヾ、ー-- ニ、 i 良しとするって事でさ……
) \== / ___ T ー<ミ ) i
ノ 、、`ー- '" / `T ー- 、ヽ こらえてくれ
ー゙` ,,;;;;: / _,. -、 フ ヾ、 ー- 、) \_ ______
{ ::::::. `{ !_ !::::/ i }= ,. '⌒ //
{ r‐‐ ニ=:::::、  ̄ i V /ヽ
. V/ ̄ ,..ィ< ;::| \ ( ))
、 | / (:::/ ヽ i ) ::ノ
.ヾ\  ̄ ヾ_ / __ i o /
ヽ\ , - ' ,r‐ァ- !ー <
ヾ\ /::;r= '" , /| ))
f⌒ 、 `'" _,/ / .| //|
', T\  ̄:::::. / | / / i
\::::::.\ ヾ''゙ / | / / !
ヾ::::::::ヘ:::::...、 ___,....:::::'' | /r-</
>:::::::::::::::::::::::..... i i Y
i IEでキャプチャすると i
i 言ったばかりなのに…… /
i スマン /
ド、 ありゃウソだった /
rァノ二`ヽ\ ,.. '" ,. ────────
{ ` イ-‐- 、巛\___ ,.. -<\_ / でも まあ
` T´r ___ i 弋 ~"ノ //\_><9 / その代わりにFireFoxでの
ヾi Vr::::::V ミミ ,r''/ ', ヽ、_ { i キャプチャ方法を載せとくから
ト、‘== ' / r‐ '" ヾ、ー-- ニ、 i 良しとするって事でさ……
) \== / ___ T ー<ミ ) i
ノ 、、`ー- '" / `T ー- 、ヽ こらえてくれ
ー゙` ,,;;;;: / _,. -、 フ ヾ、 ー- 、) \_ ______
{ ::::::. `{ !_ !::::/ i }= ,. '⌒ //
{ r‐‐ ニ=:::::、  ̄ i V /ヽ
. V/ ̄ ,..ィ< ;::| \ ( ))
、 | / (:::/ ヽ i ) ::ノ
.ヾ\  ̄ ヾ_ / __ i o /
ヽ\ , - ' ,r‐ァ- !ー <
ヾ\ /::;r= '" , /| ))
f⌒ 、 `'" _,/ / .| //|
', T\  ̄:::::. / | / / i
\::::::.\ ヾ''゙ / | / / !
ヾ::::::::ヘ:::::...、 ___,....:::::'' | /r-</
>:::::::::::::::::::::::..... i i Y
すみませんでした。
IEの設定変えるとメインブラウザであるChromeにも影響あり、
ポート8080に常にプロキシ立てておかないとロクにブラウジングもできない始末…
プロキシ設定を毎回変えるのは面倒なので、影響を受けないFireFoxでキャプチャします。
以下、キャプチャ設定方法です。
①ブラウザを起動し、右上の三本線のアイコンをクリック後、「オプション」を選択
②左側のフレームから「詳細」を選択してから「ネットワーク」タブを選択、「接続設定」をクリック。
なお、キャッシュの削除はこの画面で「今すぐ消去」をクリック。
③手動でプロキシを設定する(M)にチェックを入れ、下図の通り設定しOKボタンをクリック。
[Jmeter]_02_シナリオキャプチャ-01_事前準備編 [Jmeter]
負荷シナリオの前準備として、スレッドグループを追加する。
テスト計画(右クリック) -> 追加 -> Threads(Users) -> スレッドグループ
続いてキャプチャ用のHTTPプロキシサーバを立てる。
ワークベンチ(右クリック) -> 追加 -> Non-Testエレメント -> HTTP プロキシサーバ
★Point★
さらに、Result treeを追加しておく。
シナリオスケルトン作成時には不要だが、
正規表現抽出やリクエスト/レスポンスの正否確認の際に必要となる。
HTTPプロキシサーバ(右クリック) -> 追加 -> リスナー -> 結果をツリーで表示
続いて、キャッシュ削除とプロキシ設定を行う。
今回は InternetExplorer でキャプチャを行う場合を想定する。
(ただし、プロキシ設定のみはChromeも同様の手順)
まずはコントロールパネルを開き、
表示方法を「大きいアイコン」とした上で「インターネット オプション」をクリック。
まずはブラウザキャッシュを削除する。
「全般タブ」の 閲覧の履歴 箇所で「削除」をクリック。
以下2か所をチェックし、削除ボタンをクリック。
- インターネット一時ファイルおよび Web サイトのファイル(T)
- クッキーと Web サイトデータ(O)
★Point★
ブラウザキャッシュが残っている場合、
.pngや.css、.jsなどの静的ファイルをリクエストしない場合がある。
これらのリクエストも行いたい場合には、事前にキャッシュを消去することが必要。
特に2回目のキャプチャ時は忘れがちなので注意。
続いてプロキシ設定。
「接続」タブで ローカル エリア ネットワーク (LAN) の設定 から「LAN の設定(L)」をクリック。
プロキシ サーバーで以下にチェック。
「LAN にプロキシ サーバーを使用する~~」
また、以下の設定を行う。
アドレス(E) : localhost
ポート(T) : 8080 (空きポートであれば任意の数値でOK。今回は8080とした)
ローカルマシン内のサーバにアクセスしてキャプチャする場合、
「ローカル アドレスには~」
の箇所のチェックはしないこと。
最後に、HTTPプロキシサーバの設定を行う。
設定はお好みでOKだが、今回はデフォルト設定から以下点を変更した。
①ポート
先述のインターネットオプションにて設定したプロキシのポート番号を入力。
②対象となるコントローラ
こちらも同様、先述の通り作成したスレッドグループを設定。
③グループにする
複数のHTTPリクエストを1つのコントローラにまとめる設定とする (理由は別途)。
④Type
スレッド数(≒アクセスユーザ数)分のセッションを張る設定。
デフォルトは空白(プロパティ未変更の場合、Java)だが、
Javaとした場合はHTTPセッションが使いまわされてしまう。
-> 性能試験の結果からLB、Webサーバのセッション数を決定する場合など、
セッション数が少なく見積もられてしまい大惨事につながりかねない。。。
プロキシの起動には、「開始」をクリック。
以上でシナリオキャプチャの事前準備は完了。
テスト計画(右クリック) -> 追加 -> Threads(Users) -> スレッドグループ
続いてキャプチャ用のHTTPプロキシサーバを立てる。
ワークベンチ(右クリック) -> 追加 -> Non-Testエレメント -> HTTP プロキシサーバ
★Point★
さらに、Result treeを追加しておく。
シナリオスケルトン作成時には不要だが、
正規表現抽出やリクエスト/レスポンスの正否確認の際に必要となる。
HTTPプロキシサーバ(右クリック) -> 追加 -> リスナー -> 結果をツリーで表示
続いて、キャッシュ削除とプロキシ設定を行う。
今回は InternetExplorer でキャプチャを行う場合を想定する。
(ただし、プロキシ設定のみはChromeも同様の手順)
まずはコントロールパネルを開き、
表示方法を「大きいアイコン」とした上で「インターネット オプション」をクリック。
まずはブラウザキャッシュを削除する。
「全般タブ」の 閲覧の履歴 箇所で「削除」をクリック。
以下2か所をチェックし、削除ボタンをクリック。
- インターネット一時ファイルおよび Web サイトのファイル(T)
- クッキーと Web サイトデータ(O)
★Point★
ブラウザキャッシュが残っている場合、
.pngや.css、.jsなどの静的ファイルをリクエストしない場合がある。
これらのリクエストも行いたい場合には、事前にキャッシュを消去することが必要。
特に2回目のキャプチャ時は忘れがちなので注意。
続いてプロキシ設定。
「接続」タブで ローカル エリア ネットワーク (LAN) の設定 から「LAN の設定(L)」をクリック。
プロキシ サーバーで以下にチェック。
「LAN にプロキシ サーバーを使用する~~」
また、以下の設定を行う。
アドレス(E) : localhost
ポート(T) : 8080 (空きポートであれば任意の数値でOK。今回は8080とした)
ローカルマシン内のサーバにアクセスしてキャプチャする場合、
「ローカル アドレスには~」
の箇所のチェックはしないこと。
最後に、HTTPプロキシサーバの設定を行う。
設定はお好みでOKだが、今回はデフォルト設定から以下点を変更した。
設定箇所 | Content | Value | Note |
---|---|---|---|
Global Settings | ポート | 8080 | ① |
Test plan content | 対象となるコントローラ | テスト計画>スレッドグループ | ② |
グループにする | Put each group in a new transaction controller | ③ | |
HTTP Samler settings | Type | HttpClient4 | ④ |
①ポート
先述のインターネットオプションにて設定したプロキシのポート番号を入力。
②対象となるコントローラ
こちらも同様、先述の通り作成したスレッドグループを設定。
③グループにする
複数のHTTPリクエストを1つのコントローラにまとめる設定とする (理由は別途)。
④Type
スレッド数(≒アクセスユーザ数)分のセッションを張る設定。
デフォルトは空白(プロパティ未変更の場合、Java)だが、
Javaとした場合はHTTPセッションが使いまわされてしまう。
-> 性能試験の結果からLB、Webサーバのセッション数を決定する場合など、
セッション数が少なく見積もられてしまい大惨事につながりかねない。。。
プロキシの起動には、「開始」をクリック。
以上でシナリオキャプチャの事前準備は完了。
[Jmeter]_01_インストール [Jmeter]
以下URLにアクセス
http://jmeter.apache.org/
上図内赤枠箇所、「Download Releases」をクリックし、ダウンロードページに遷移。
今回はBainariesの「apache-jmeter-2.13.zip」をクリック、ダウンロードする。
対象としたVersion 2.13には、Jmeterの起動にJava 6.0以降が必要となる。
Javaのインストールについては割愛(以下ページ等を参照のこと)。
- https://www.java.com/ja/download/help/download_options.xml
ダウンロード後、任意のフォルダに展開。
今回は「C:\workspace\20_Software」へ。
Jmeterの起動は「.\apache-jmeter-2.13\bin」のjmeter.batを実行する。
実行後画面は以下の通り。
http://jmeter.apache.org/
上図内赤枠箇所、「Download Releases」をクリックし、ダウンロードページに遷移。
今回はBainariesの「apache-jmeter-2.13.zip」をクリック、ダウンロードする。
対象としたVersion 2.13には、Jmeterの起動にJava 6.0以降が必要となる。
Javaのインストールについては割愛(以下ページ等を参照のこと)。
- https://www.java.com/ja/download/help/download_options.xml
ダウンロード後、任意のフォルダに展開。
今回は「C:\workspace\20_Software」へ。
Jmeterの起動は「.\apache-jmeter-2.13\bin」のjmeter.batを実行する。
実行後画面は以下の通り。
[Jmeter]_Agenda [Jmeter]
目次のようなページを。
01_インストール
02_シナリオキャプチャ
02_01_事前準備編
02_02_キャプチャ編
03_シナリオ作成
03_01_HTTPリクエスト編
03_02_HTTPヘッダ編
03_03_正規表現抽出編
03_04_変数化編
- CSV_Read
- CSV Data Set Config
- ユーザー定義変数
04_シナリオ疎通
サンプラーエラー後のアクション
ループさせる
- ループコントローラ
変数により流す処理を変える
- switchコントローラ
- ifコントローラ
===== テストする =====
Slave Master or 単体
コマンドライン or GUI
結果集計
===== おまけ =====
Mobile端末のキャプチャをする
SSLのキャプチャをする
SOAP通信のキャプチャをする
非同期処理の扱い
Q&Aこんなケースはどうする?
Jmeterのこと_part05 [Jmeter]
Part05。
やっとだ。
前回記載したパラメータを再掲。
・固定パラメータ:パラメータの値が毎回変動しないもの。
URLやボタン名など
・ユーザー変動パラメータ:パラメータの値がユーザーの操作によって変動するもの。
ユーザー名、パスワードなど
・システム変動パラメータ:パラメータの値をシステムが自動的に変動させるもの。
トークンなど
今日はユーザー変動パラメータについて。
ランダム値を作って、それを使うこともできるのだけれど、フツーはCSVを使う。
CSVを読み込ませる手法は以下の2種。
用途に応じて使ってくだしい。
説明には、以下のCSVを想定しますね。
=Number, Fruit, Color==
1,Apple,Red
2,Orange,Orange
3,Lemon,Lemon
4,Banana,Yellow
↑2,3個目は手抜きだな…笑
■__CSVRead関数
半角アンダーバー2個。
これはエレメントの追加とかは特になく、そのままパラメータリクエストに追加するだけ。
httpリクエストの内部でこんな感じで使用する。
===Name=== ===Value===
Number ${__CSVRead(C:\jmeter\csv\test.csv,0)}
Fruit ${__CSVRead(C:\jmeter\csv\test.csv,1)}
Color ${__CSVRead(C:\jmeter\csv\test.csv,2)}
1つ目の引数にはcsvファイルを絶対パスで。
パス名を省略すると、jmeterのbinディレクトリ配下にCSVファイルを置かないと読み取られない。
2つ目の引数は、先頭を0としたCSVファイル内の取得したいカラム番号を記載する。
■CSV Data Set Config
これは設定エレメントが必要。
スレッドグループを右クリック。
追加→設定エレメント→CSV Data Set Config
以下の設定項目があるよ。
Filename : 読み込むCSVファイル名。CSVRead関数と同じく、絶対パスで。省略すると(以下略
File encoding : 読み込むCSVファイルのエンコードを指定。
Variable Names : CSVファイルから読み込む変数名を書く。(詳しくは以下!)
Delimiter : CSVファイルの区切り文字を指定。↑のCSVであれば、フツーに,でよい。
Allow quoted data? : "(ダブルクォート)で囲まれたデータを使うときはTrue
Recycle on EOF? : ファイルの終端(↑の例だと4行目)までデータを使用した際に、次の読み込みを先頭行にループさせるか否か。
Stop thread on OEF? : ファイルの終端までデータを使用した際にThreadを終了させるか否か。
Sharing mode : スレッドグループ配下に設定しておけばどれでも変わらないと思う。All ThreadsでOK。
補足&使用方法。
Variable Namesは、↑のCSVの例だとこんな感じの記述。
number, fruit, color
で、httpリクエストの内部でこんな感じで使用する。
===Name=== ===Value===
Number ${number}
Fruit ${fruit}
Color ${color}
こんなとこか。CSV2種の違いとか、それ以降については次回。
明日も仕事だ。。。
やっとだ。
前回記載したパラメータを再掲。
・固定パラメータ:パラメータの値が毎回変動しないもの。
URLやボタン名など
・ユーザー変動パラメータ:パラメータの値がユーザーの操作によって変動するもの。
ユーザー名、パスワードなど
・システム変動パラメータ:パラメータの値をシステムが自動的に変動させるもの。
トークンなど
今日はユーザー変動パラメータについて。
ランダム値を作って、それを使うこともできるのだけれど、フツーはCSVを使う。
CSVを読み込ませる手法は以下の2種。
用途に応じて使ってくだしい。
説明には、以下のCSVを想定しますね。
=Number, Fruit, Color==
1,Apple,Red
2,Orange,Orange
3,Lemon,Lemon
4,Banana,Yellow
↑2,3個目は手抜きだな…笑
■__CSVRead関数
半角アンダーバー2個。
これはエレメントの追加とかは特になく、そのままパラメータリクエストに追加するだけ。
httpリクエストの内部でこんな感じで使用する。
===Name=== ===Value===
Number ${__CSVRead(C:\jmeter\csv\test.csv,0)}
Fruit ${__CSVRead(C:\jmeter\csv\test.csv,1)}
Color ${__CSVRead(C:\jmeter\csv\test.csv,2)}
1つ目の引数にはcsvファイルを絶対パスで。
パス名を省略すると、jmeterのbinディレクトリ配下にCSVファイルを置かないと読み取られない。
2つ目の引数は、先頭を0としたCSVファイル内の取得したいカラム番号を記載する。
■CSV Data Set Config
これは設定エレメントが必要。
スレッドグループを右クリック。
追加→設定エレメント→CSV Data Set Config
以下の設定項目があるよ。
Filename : 読み込むCSVファイル名。CSVRead関数と同じく、絶対パスで。省略すると(以下略
File encoding : 読み込むCSVファイルのエンコードを指定。
Variable Names : CSVファイルから読み込む変数名を書く。(詳しくは以下!)
Delimiter : CSVファイルの区切り文字を指定。↑のCSVであれば、フツーに,でよい。
Allow quoted data? : "(ダブルクォート)で囲まれたデータを使うときはTrue
Recycle on EOF? : ファイルの終端(↑の例だと4行目)までデータを使用した際に、次の読み込みを先頭行にループさせるか否か。
Stop thread on OEF? : ファイルの終端までデータを使用した際にThreadを終了させるか否か。
Sharing mode : スレッドグループ配下に設定しておけばどれでも変わらないと思う。All ThreadsでOK。
補足&使用方法。
Variable Namesは、↑のCSVの例だとこんな感じの記述。
number, fruit, color
で、httpリクエストの内部でこんな感じで使用する。
===Name=== ===Value===
Number ${number}
Fruit ${fruit}
Color ${color}
こんなとこか。CSV2種の違いとか、それ以降については次回。
明日も仕事だ。。。
Jmeterのこと_part04 [Jmeter]
Part04。続いたなぁ。
画像を使えないのはキツイ。
知っておいたほうがよい、ユーザー定義変数などなど。
その前に。
突然だがhttpリクエスト内に含めるパラメータは、主に以下の3点に分類できる。
・固定パラメータ:パラメータの値が毎回変動しないもの。
URLやボタン名など
・ユーザー変動パラメータ:パラメータの値がユーザーの操作によって変動するもの。
ユーザー名、パスワードなど
・システム変動パラメータ:パラメータの値をシステムが自動的に変動させるもの。
トークンなど
■ユーザー定義変数
これ、便利。
多用する固定パラメータ(URL、プロトコル、ポート番号などなど)をここに設定しておくと、httpリクエスト毎に設定する必要がなくなり、ここだけを変更するだけで全体に反映できる。
テストA環境→テストB環境など、いろいろな環境で使用することが想定される場合は本当にラクになる。
で、設定方法。
スレッドグループを右クリック。
追加→設定エレメント→ユーザー定義変数。
変数を作成するときは、追加ボタンをクリックして、名前欄と値欄に入力するだけ。
例:URLの設定
名前:URL
値 :192.168.1.100
変数の使い方は、使いたいところで
${URL}
と記載するだけ。
“URL”の箇所は名前欄に設定した値と同じにすればOK!
あっ。もう500文字である。
httpリクエストの設定方法の前にCSV設定の方法や便利なものを先に書いてしまおう。
画像を使えないのはキツイ。
知っておいたほうがよい、ユーザー定義変数などなど。
その前に。
突然だがhttpリクエスト内に含めるパラメータは、主に以下の3点に分類できる。
・固定パラメータ:パラメータの値が毎回変動しないもの。
URLやボタン名など
・ユーザー変動パラメータ:パラメータの値がユーザーの操作によって変動するもの。
ユーザー名、パスワードなど
・システム変動パラメータ:パラメータの値をシステムが自動的に変動させるもの。
トークンなど
■ユーザー定義変数
これ、便利。
多用する固定パラメータ(URL、プロトコル、ポート番号などなど)をここに設定しておくと、httpリクエスト毎に設定する必要がなくなり、ここだけを変更するだけで全体に反映できる。
テストA環境→テストB環境など、いろいろな環境で使用することが想定される場合は本当にラクになる。
で、設定方法。
スレッドグループを右クリック。
追加→設定エレメント→ユーザー定義変数。
変数を作成するときは、追加ボタンをクリックして、名前欄と値欄に入力するだけ。
例:URLの設定
名前:URL
値 :192.168.1.100
変数の使い方は、使いたいところで
${URL}
と記載するだけ。
“URL”の箇所は名前欄に設定した値と同じにすればOK!
あっ。もう500文字である。
httpリクエストの設定方法の前にCSV設定の方法や便利なものを先に書いてしまおう。
Jmeterのこと_part03 [Jmeter]
さてさて、GUIが起動しましたらば。
httpリクエストをキャプチャする方法を。
■キャプチャ準備
テスト計画を右クリック。
追加→Threads(users)→スレッドグループ
このスレッドグループがhttpリクエストのキャプチャ先になります。
ここはまずは追加するだけ。
ワークベンチを右クリック。
追加→Non-Testエレメント→HTTPプロキシサーバ
HTTPプロキシサーバをJmeterで立てて、ブラウザでキャプチャしたいリクエストを実行する形になります。
HTTPプロキシサーバの設定で変更する箇所は
・ポート:この番号を後でブラウザに設定(デフォルトは8080)
・対象となるコントローラ:テスト計画>スレッドグループ
・グループにする:Put each group in a new transaction controller
以上の3点。あとはお好みで。
お次はブラウザの設定。
Firefoxなら、オプション→詳細タブ→ネットワークタブ→接続設定→
手動でプロキシを設定する→HTTPプロキシ:localhost、ポート:8080
これでOK。
あとは、HTTPプロキシサーバの設定画面に戻って開始ボタンをクリックするだけ。
これで任意のページにアクセスすれば、キャプチャができます。
◆ワンポイントアドバイス
キャプチャしたあとでリクエストした内容、また、レスポンスデータの内容を知りたいときありますよね。
ソレ、記録しておくことができます。
方法は以下の通り。
HTTPプロキシサーバを右クリック。
追加→リスナー→結果をツリーで表示。
このResult Treeを追加しておくと、後で色々見返すことができるよ。
httpリクエストをキャプチャする方法を。
■キャプチャ準備
テスト計画を右クリック。
追加→Threads(users)→スレッドグループ
このスレッドグループがhttpリクエストのキャプチャ先になります。
ここはまずは追加するだけ。
ワークベンチを右クリック。
追加→Non-Testエレメント→HTTPプロキシサーバ
HTTPプロキシサーバをJmeterで立てて、ブラウザでキャプチャしたいリクエストを実行する形になります。
HTTPプロキシサーバの設定で変更する箇所は
・ポート:この番号を後でブラウザに設定(デフォルトは8080)
・対象となるコントローラ:テスト計画>スレッドグループ
・グループにする:Put each group in a new transaction controller
以上の3点。あとはお好みで。
お次はブラウザの設定。
Firefoxなら、オプション→詳細タブ→ネットワークタブ→接続設定→
手動でプロキシを設定する→HTTPプロキシ:localhost、ポート:8080
これでOK。
あとは、HTTPプロキシサーバの設定画面に戻って開始ボタンをクリックするだけ。
これで任意のページにアクセスすれば、キャプチャができます。
◆ワンポイントアドバイス
キャプチャしたあとでリクエストした内容、また、レスポンスデータの内容を知りたいときありますよね。
ソレ、記録しておくことができます。
方法は以下の通り。
HTTPプロキシサーバを右クリック。
追加→リスナー→結果をツリーで表示。
このResult Treeを追加しておくと、後で色々見返すことができるよ。
Jmeterのこと_part02 [Jmeter]
さて、part02。
まずはモノがないと何もできないので、ダウンロード。
■Jmeterのダウンロード
「apache jmeter」でググる。
先頭に出てくるリンクをクリック。
Download Releasesリンクをクリック。
Apache JMeter 2.11 (Requires Java 6 or later) – Binaries - apache-jmeter-2.11.zipのリンクからzipファイルをダウンロード。
#もう2.11まで出てるのね
Jmeterを起動するときは、zipファイルを任意の場所に展開して以下のファイルを実行。
\bin\jmeter.bat
あっ、エラーだ。Javaが足りない。。。
Javaもダウンロード&インストールします。
■Javaのダウンロード&インストール
「java」でググる。
ページ「Java SE ダウンロード - Oracle」へ。
こちら(USサイト)の文字列をクリックしUSサイトへ。
#英語ニガテ。。。Javaもいつのまにか8に!
JRE(で、いいかな。)の下のDOWNLOADをクリック。
ラジオボタンでAccept License Agreementにチェックを入れるとリンクが活性化されるので、お好きなものをダウンロード。
僕はこれ。
Windows x86 Offline(32bitオフラインインストール用) : jre-8u11-windows-i586.exe
ダウンロードしたらexeファイルを実行。
こだわりなければインストールボタンクリックのみでOK!
と、思ったらパスが通らねぇー。
コントロールパネル → システム → システムの詳細設定
詳細設定タブの環境変数 → ユーザー環境変数のPath(なければ新規、あれば編集)にJava.exeのあるパスを追記。デフォルトなら以下のとおり。
C:\Program Files (x86)\Java\jre8\bin
うまく設定できているか確認するときは、コマンドプロンプトから
>java –version
と実行する。
失敗しているときは、以下のメッセージが表示される。
'java' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
成功しているときはjavaのバージョン情報が表示される。以下は例。
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) Client VM (build 25.11-b03, mixed mode, sharing)
と、今日はここまでかな。
ここまでやればJmeterが起動するはず!
まずはモノがないと何もできないので、ダウンロード。
■Jmeterのダウンロード
「apache jmeter」でググる。
先頭に出てくるリンクをクリック。
Download Releasesリンクをクリック。
Apache JMeter 2.11 (Requires Java 6 or later) – Binaries - apache-jmeter-2.11.zipのリンクからzipファイルをダウンロード。
#もう2.11まで出てるのね
Jmeterを起動するときは、zipファイルを任意の場所に展開して以下のファイルを実行。