JMeterでシナリオを作成する場合は、一つ一つ手入力していく方法と、「HTTPプロキシサーバ」を使ってキャプチャしていく方法があります。単一URLであれば手入力でも構いませんが、複数の画面遷移をシュミレーションする場合は「HTTPプロキシサーバ」を使うと便利です。
この記事では、「HTTPプロキシサーバ」を使ったシナリオ作成方法について紹介します。
動画解説もあるので、そちらも併せて参考にしてください。
設定の流れは次の通りです。
- JMeter:HTTPプロキシサーバの設定
- Firefoxの設定
- シナリオキャプチャ
- 動作確認
対象ブラウザは認証局の設定がやりやすく、普段使いしていない「Firefox」を利用しています。
以降では、「EC-CUBE 4.0.3」を使って、次のシナリオを作成する形で進めていきます。
- トップ画面
- ログイン画面
- ログイン実施
EC-CUBEの環境構築方法は、番外編:EC-CUBE4の環境構築方法を参照してください。
JMeter:HTTPプロキシサーバの設定
記録コントローラーの作成
HTTPプロキシ経由でキャプチャしたシナリオは記録コントローラーへ記録されます。
まずは、JMeterのGUIを起動しスレッドグループを作成します。
- テスト計画->追加->Threads(Users)->スレッドグループ
スレッドグループ内に記録コントローラーを作成します。
- スレッドグループ->追加->ロジックコントローラー->記録コントローラー
HTTPプロキシサーバの作成
次にHTTPプロキシの作成を行います。
- テスト計画->追加->Non-Testエレメント->HTTPプロキシサーバ
HTTPプロキシサーバの設定
設定:TestPlanCreation->対象となるコントローラ
「対象となるコントローラ」へ作成した記録コントローラを指定します。
設定:Requests Filtering->挿入するパターン
記録する対象となるシステムのFQDNを記載します。
.*scenario\.ptune\.jp.*
ここの設定が間違っていると、キャプチャ対象外となってしまうので、注意が必要です。
設定:Requests Filtering->除外するパターン
アプリケーション(プログラム)の負荷テストを行いたいので、静的コンテンツの取り込みは不要です。「Requests Filtering」の「除外するパターン」へ不要なファイル拡張子を記載します。
もし、静的コンテンツを含めて負荷テストを行いたい場合でも、シナリオの設定で動的にファイル取得が可能なので、ここでは除外しておきましょう。
.*\.js.*
.*\.gif.*
.*\.svg.*
.*\.css.*
.*\.jpg.*
.*\.woff2.*
.*\.ico.*
.*\.png.*
.*\.woff.*
.*\.ttf.*
上記をコピーして、「Add From Clipboard」でコピーすることが可能です。
もし、不要なリクエストがキャプチャされてしまう場合は、ここへ除外設定を追加していきます。
Firefoxの設定
キャプチャを行うために、ブラウザ側の設定も必要となります。
プロキシ設定
FirefoxのアクセスをJMeterのプロキシ経由へと変更します。
- オプション->一般->ネットワーク設定->接続設定->手動でプロキシを設定する
項目 | 設定 |
---|---|
IPアドレス | 127.0.0.1 |
ポート | 8888 |
認証局の追加
HTTPプロキシサーバの設定と記録コントローラの作成が終わったら、「開始」を押下します。
https通信をキャプチャするために、認証局の設定をしていきます。
- オプション->プライバシーとセキュリティ->証明書->証明書を表示
認証局証明書のインポートから、JMeterの起動時に作成された「crt」ファイルをインポートします。「crt」ファイルは、JMeterのインストールディレクトリ直下のbinフォルダ内に、「HTTPプロキシサーバ」を起動したさいに自動生成されます。
ダイアログで「この認証局によるウェブサイトの識別を信頼する」にチェックを入れてOKします。
シナリオキャプチャ
キャプチャ実施
セットアップが完了したら、実際にFirefoxからトップページへアクセスしてみます。
記録コントローラー配下にベーシック認証の情報と遷移が記録されました。
シナリオ修正
不要なシナリオの削除
記録コントローラー内のサンプラーを見ると、意図しないアクセスが記録されていることがあります。その場合は次のどちらかの方法で対応します。
- 除外フィルターを再設定して、再度取得
- 手動で削除
数が多い場合は、除外フィルターを再設定して再取得するのが良いと思います。数が少ない場合は、手動で削除していきましょう。
名前の修正
正常なキャプチャが行えたものは「名前」の変更を行っていきます。リクエストの順番がわかるように先頭に連番をつけて名前を変更していきます。最終的に、必要なものだけ残すことができたら完了です。
動作確認
記録コントローラーの下にリスナーを登録して、動作確認をしてみましょう。
- 記録コントローラー->リスナー->結果をツリーで表示
実行してみて、下図のように緑色表示になればベースのシナリオは完成です。
が、実はセッション情報の受け渡しの都合でログインエラーとなっていますので、次回以降で、エラーの解消を行っていきます。
シナリオの保存
動作確認が完了したら、シナリオの保存を行いましょう。
jmeter2.3など、バージョンによっては、保存時に選択していたシナリオのみ保存されることがあります。たとえば、「10_トップ画面」を選択して保存した場合、「10_トップ画面」のみが保存され、他のシナリオが消失しました。今回利用しているjmeter5.3では改善されているようですが、念のため「テスト計画」を選択したのちに保存をするようにしときましょう。
ハマったときの見直しポイント
ブラウザで正常表示されない
次のことを試してみましょう。
- HTTPプロキシサーバーが起動しているかを確認する
- 認証局の設定が正しくされているかを確認する
※有効期限があるので、再設定が必要な場合があります
画面遷移はできるが、シナリオが記録されない
次のことを試してみましょう。
- 挿入するパターンを削除してみる
- 除外するパターンを削除してみる
- ブラウザのプロキシ設定が適切に設定されているか確認する
キャプチャされすぎて、どれが不要なURLかがわからない
開発者ツールを開きながらブラウザから遷移を行い、「type」が「document」の遷移が必要なURLの可能性が高いです。
上記URLが「302」リダイレクトで表示されている場合は、JMeterが自動でリダイレクトしてくれるので、「302」リダイレクトをしているリクエストが必要なURLになります。
以下のURLは不要なので、除外するパターンに入れて再度実行してみましょう。
- 対象ドメイン以外へのリクエスト
- 静的ファイルへのリクエスト
まとめ
この記事ではHTTPプロキシを使ってシナリオ作成する方法を紹介しました。この記事の内容で、ベースのシナリオを作成することが可能です。このシナリオをもとに、正規表現抽出などを使い、動的な処理についての修正を加えていくことになります。
次回は、ベースシナリオのエラー解消方法についてご説明していきますのでご期待ください。
~~~~~~~~~~~~~~~~~~~~~
~ JMeterの負荷テストシナリオ作成入門 ~
~~~~~~~~~~~~~~~~~~~~~
第1回:【負荷テスト】JMeterのシナリオ作成入門
第2回:JMeterのインストールと初期設定
第3回:HTTPプロキシサーバーを利用したベースシナリオの作成
第4回:動的パラメータを取り込み、エラーを解消させる ←次の記事
第5回:リファクタリング実施
第6回:入力パラメータを外部ファイルから読み込む
第7回:負荷テスト用の修正を実施
番外編:EC-CUBE4の環境構築方法
番外編:シナリオが正しく動作しないときの調査方法