JMeterは、ブラウザと認証済みターゲットアプリケーション間のローカル記録プロキシとして機能することで、HTTPリクエストサンプラーを生成できます。現在のバージョンでは、このコンポーネントはHTTP(S)テストスクリプトレコーダーと呼ばれています。これは、1つのブラウザの通信を記録コントローラにキャプチャし、その後、スクリプトはクリーンアップ、相関分析、検証され、プロトコルレベルのテストとして実行されます。
JMeter HTTPプロキシサーバーとは何ですか?
レコーダーはローカルポートで受信します。 8888ブラウザはHTTPおよびHTTPSリクエストをそのプロキシに送信し、JMeterは一致するトラフィックを選択されたコントローラの下にあるサンプラーに変換します。再生時には、JMeterはリクエストを直接送信し、仮想ユーザーごとにブラウザを起動することはありません。
手書きで脚本を作成するのではなく、録音する理由とは?
- 実際の要求順序、リダイレクト、フォーム、およびバックグラウンドAPIをキャプチャします。
- 見落としがちなXHRやフェッチ呼び出しを明らかにします。
- 複雑なユーザー体験の迅速なベースラインを作成します。
- ヘッダーとパラメータにおける転記ミスを削減します。
小規模でドキュメント化されたAPIの場合、手動での構築の方がより簡潔です。ブラウザのネットワーク動作がまだ理解されていない場合は、記録が役立ちます。用語については、プロキシの種類に関するガイドを参照してください。
JMeter 5.xでスクリプトを記録する方法
- スクリプト作成のために、JMeterをGUIモードで起動してください。
- テスト計画にスレッドグループを追加します。
- スレッドグループの下にレコーディングコントローラーを追加します。
- 必要に応じて、HTTPリクエストのデフォルト設定とHTTPクッキーマネージャーを追加してください。
- HTTP(S)テストスクリプトレコーダーを追加し、そのターゲットとしてレコーディングコントローラーを選択します。
- 関連性のないトラフィックを制限するには、インクルード/エクスクルードパターンを使用します。
Apache JMeterの公式記録ガイドは、バージョン固有の信頼できるリファレンスです。
ステップ1) HTTPプロキシサーバーの設定
8888ターゲットコントローラーを設定し、クリックします。 お気軽にご連絡ください.HTTPおよびHTTPSプロキシホストを使用してテストブラウザを設定します。 127.0.0.1 ポート番号も同じです。ブラウザが別の仮想マシンまたはコンテナで実行されている場合、localhost はその環境を指します。代わりに、承認済みの到達可能なプライベート アドレスを使用してください。
Proxy host: 127.0.0.1
Proxy port: 8888
Include: https?://test.example.com/.*
Exclude: .*(.png|.jpg|.gif|.css|.woff2)(?.*)?$
アプリケーションAPIが別のサブドメインを使用する可能性があるため、最初の段階で過度にフィルタリングしないでください。一度記録し、ホストを検査してから、パターンを洗練させてください。
ステップ 2) アクティビティを記録する
- レコーダーを起動し、隔離されたテストブラウザ内でのみ、その一時証明書を信頼してください。
- 承認済みのテスト環境を開きます。
- 人間らしいスピードで、クリーンな旅を一度だけ実現しよう。
- 最後の業務処理が完了したら、直ちに録画を停止してください。
- ブラウザの通常のプロキシ設定に戻してください。
サンプラーの名前を業務アクションごとに変更し、関連するリクエストをトランザクションコントローラーの下にグループ化します。分析、広告、ブラウザの更新、チャットウィジェット、および重複する静的リソースは、明示的にスコープに含まれている場合を除き、削除します。
すべてのサンプラーを検査して、機密情報がないか確認してください。パスワードは保護されたランタイムデータから取得し、トークンの変更には相関関係が必要です。
ステップ 3) テスト計画を実行する
負荷を追加する前に、ユーザー1人とイテレーション1回を検証してください。一時的に結果ツリーの表示を使用し、リダイレクトとレスポンスボディを確認し、期待されるビジネス結果に対するアサーションを追加してください。HTTP 200だけでは、ログインまたはチェックアウトが成功したことを証明できません。
Threads: 1
Ramp-up: 1 second
Loop Count: 1
デバッグ後、負荷の高いリスナーを削除し、GUIなしで実行します。
jmeter -n -t recorded-test.jmx -l results.jtl -e -o html-report
レポートディレクトリは新規作成または空である必要があります。負荷を徐々に増やし、対象システムとJMeterの両方を監視してください。
ステップ 4) テスト結果を保存する
再利用可能なプランを .jmx ファイルに保存し、生成されたデータを別々に保管する:
- JMX: サンプラー、コントローラー、アサーション、タイマー、変数、および設定。
- JTL: 分析用の生サンプル結果。
- HTMLダッシュボード: パーセンタイル、スループット、エラー、およびアクティブなスレッド。
- サーバーメトリクス: CPU、メモリ、データベース、キュー、およびサービステレメトリ。
非機密プロパティとテストデータを使用して計画のバージョン管理を行います。JMeterとJavaのバージョン、ターゲットビルド、環境、ユーザー数、立ち上げ期間、および実行期間を記録します。
HTTPSトラフィックと証明書の記録
HTTPSの場合、JMeterはレコーダーの起動時に一時的な認証局を生成します。この認証局は専用のテストブラウザにのみインポートし、認証されたサイトを記録した後、削除してください。
- HTTP(S)テストスクリプトレコーダーを起動します。
- 生成されたApacheJMeterTemporaryRootCA証明書を探してください。
- 隔離されたプロファイルに、信頼できる認証局としてインポートしてください。
- 承認されたHTTPS接続の経路を記録します。
- 作業が完了したら、証明書を削除してください。
証明書ピンニング、相互TLS、管理対象ブラウザ、モバイルアプリ、および最新のトランスポートプロトコルは、傍受を阻止できます。本番環境のセキュリティ対策を弱体化させないでください。ステージングビルド、API仕様、または承認済みの代替キャプチャ方法を使用してください。
相関関係:録画したスクリプトを再生可能にする
セッションID、CSRFトークン、OAuthステート、リクエスト署名、リソースIDは実行ごとに変化します。相関分析では、あるレスポンスから新しい値を抽出し、それを後続のリクエストに置き換えます。
- 動的な値が最初に含まれる応答を探します。
- JSON、CSS、XPath、または正規表現抽出機能を追加します。
- 結果をJMeterの変数名に格納します。
- 後からハードコードされた値を変数参照に置き換えてください。
- 抽出結果に一致するものがない場合は、明確にエラーとして処理を終了します。
JSON Extractor
Variable: csrfToken
JSON Path: $.csrf.token
Default: NOT_FOUND
Later header:
X-CSRF-Token: ${csrfToken}
パラメータ化は、多くの場合CSVファイルから得られる独立したユーザーデータを提供します。相関分析は、実行中にサーバーが生成するデータを取得します。現実的な計画では、通常、両方が必要です。
トラブルシューティング
| 問題 | 考えられる原因 | 修正する |
|---|---|---|
| リクエストは記録されていません | プロキシが間違っている、レコーダーが停止している、ポートの競合、またはバイパスルール | ホストとポートを確認し、レコーダーを起動して、ターゲットの除外設定を解除してください。 |
| HTTPS警告 | 一時的な認証局が見つからないか、期限切れです | 新しいレコーダー証明書を生成し、テストプロファイルにのみインポートしてください。 |
| 交通量が多すぎる | 拡張機能、テレメトリ、その他のタブ、または広範なパターン | クリーンなプロファイルを使用し、含める/除外するフィルターを調整してください。 |
| ログインリプレイが失敗します | Cookie、トークン、OAuthフロー、または相関関係が不足しています | Cookie Managerを追加し、動的な値を抽出し、リダイレクトを検査します。 |
| その後ブラウザがオフラインになります | それはまだ停止したローカルプロキシを指しています | 自動設定またはプロキシなし設定に戻します。 |
| JMeterのメモリエラー | GUIリスナーまたは大容量レスポンスストレージ | GUIを使用しないモードを使用し、保存する応答データを制限してください。 |
| ブラウザとは異なる | JMeterはページのJavaScriptをレンダリングまたは実行しません | 基盤となるAPIをテストし、ブラウザツールを使用してメトリクスを表示する。 |
JMeterはプロトコルのパフォーマンス測定ツールです。Largest Contentful Paintなどの視覚的なイベントを単独で測定することはできません。
よくあるご質問
JMeterでHTTPプロキシサーバー名の代わりに使われていたものは何ですか?
このコンポーネントは現在、HTTP(S)テストスクリプトレコーダーと呼ばれています。
どのレコーダーポートを使用すればよいですか?
未使用のローカルポートであればどれでも使用できます。ポート8888はよく使用されるため、ブラウザも同じ値を使用する必要があります。
JMeterはHTTPSトラフィックを記録できますか?
はい、隔離されたテストブラウザがJMeterの一時的な記録証明書を信頼する場合です。
録画したスクリプトを再生すると、なぜ失敗するのでしょうか?
動的トークン、クッキー、認証フロー、ホストの違い、および欠落データは、一般的に相関分析とパラメータ化を必要とします。
JMeterはChromeの映像を記録できますか?
はい。JMeterのローカルレコーダーを使用するように、クリーンなChromeプロファイルを設定してください。
JMeterのGUIから負荷テストを実行すべきでしょうか?
いいえ。GUIモードでビルドとデバッグを行い、その後、非GUIモードでロードを実行してください。
JMeterは実際のブラウザのように動作しますか?
いいえ。プロトコルリクエストは送信しますが、HTMLをレンダリングしたり、ブラウザのJavaScriptを実行したりはしません。
本番環境へのログイン画面を記録するのは安全ですか?
ステージング環境およびテスト環境のアカウントを優先してください。本番環境でのキャプチャには、明示的な承認と厳格な機密情報の取り扱いが必要です。
