JMeterは、ブラウザと認証済みターゲットアプリケーション間のローカル記録プロキシとして機能することで、HTTPリクエストサンプラーを生成できます。現在のバージョンでは、このコンポーネントはHTTP(S)テストスクリプトレコーダーと呼ばれています。これは、1つのブラウザの通信を記録コントローラにキャプチャし、その後、スクリプトはクリーンアップ、相関分析、検証され、プロトコルレベルのテストとして実行されます。

自分が所有しているシステム、または評価を明示的に許可されているシステムのみをテストしてください。 録音データには、パスワード、Cookie、トークン、個人データが含まれる可能性があります。ステージングアカウントの使用を推奨し、JMXファイルを共有する前に機密情報を削除し、承認された負荷制限を遵守してください。

JMeter HTTPプロキシサーバーとは何ですか?

レコーダーはローカルポートで受信します。 8888ブラウザはHTTPおよびHTTPSリクエストをそのプロキシに送信し、JMeterは一致するトラフィックを選択されたコントローラの下にあるサンプラーに変換します。再生時には、JMeterはリクエストを直接送信し、仮想ユーザーごとにブラウザを起動することはありません。

手書きで脚本を作成するのではなく、録音する理由とは?

  • 実際の要求順序、リダイレクト、フォーム、およびバックグラウンドAPIをキャプチャします。
  • 見落としがちなXHRやフェッチ呼び出しを明らかにします。
  • 複雑なユーザー体験の迅速なベースラインを作成します。
  • ヘッダーとパラメータにおける転記ミスを削減します。

小規模でドキュメント化されたAPIの場合、手動での構築の方がより簡潔です。ブラウザのネットワーク動作がまだ理解されていない場合は、記録が役立ちます。用語については、プロキシの種類に関するガイドを参照してください。

JMeter 5.xでスクリプトを記録する方法

  1. スクリプト作成のために、JMeterをGUIモードで起動してください。
  2. テスト計画にスレッドグループを追加します。
  3. スレッドグループの下にレコーディングコントローラーを追加します。
  4. 必要に応じて、HTTPリクエストのデフォルト設定とHTTPクッキーマネージャーを追加してください。
  5. HTTP(S)テストスクリプトレコーダーを追加し、そのターゲットとしてレコーディングコントローラーを選択します。
  6. 関連性のないトラフィックを制限するには、インクルード/エクスクルードパターンを使用します。

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) アクティビティを記録する

  1. レコーダーを起動し、隔離されたテストブラウザ内でのみ、その一時証明書を信頼してください。
  2. 承認済みのテスト環境を開きます。
  3. 人間らしいスピードで、クリーンな旅を一度だけ実現しよう。
  4. 最後の業務処理が完了したら、直ちに録画を停止してください。
  5. ブラウザの通常のプロキシ設定に戻してください。

サンプラーの名前を業務アクションごとに変更し、関連するリクエストをトランザクションコントローラーの下にグループ化します。分析、広告、ブラウザの更新、チャットウィジェット、および重複する静的リソースは、明示的にスコープに含まれている場合を除き、削除します。

すべてのサンプラーを検査して、機密情報がないか確認してください。パスワードは保護されたランタイムデータから取得し、トークンの変更には相関関係が必要です。

ステップ 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のバージョン、ターゲットビルド、環境、ユーザー数、立ち上げ期間、および実行期間を記録します。

GUIから大きな負荷をかけないでください。 GUIリスナーはメモリを消費し、結果を歪める可能性があります。

HTTPSトラフィックと証明書の記録

HTTPSの場合、JMeterはレコーダーの起動時に一時的な認証局を生成します。この認証局は専用のテストブラウザにのみインポートし、認証されたサイトを記録した後、削除してください。

  1. HTTP(S)テストスクリプトレコーダーを起動します。
  2. 生成されたApacheJMeterTemporaryRootCA証明書を探してください。
  3. 隔離されたプロファイルに、信頼できる認証局としてインポートしてください。
  4. 承認されたHTTPS接続の経路を記録します。
  5. 作業が完了したら、証明書を削除してください。

証明書ピンニング、相互TLS、管理対象ブラウザ、モバイルアプリ、および最新のトランスポートプロトコルは、傍受を阻止できます。本番環境のセキュリティ対策を弱体化させないでください。ステージングビルド、API仕様、または承認済みの代替キャプチャ方法を使用してください。

相関関係:録画したスクリプトを再生可能にする

セッションID、CSRFトークン、OAuthステート、リクエスト署名、リソースIDは実行ごとに変化します。相関分析では、あるレスポンスから新しい値を抽出し、それを後続のリクエストに置き換えます。

  1. 動的な値が最初に含まれる応答を探します。
  2. JSON、CSS、XPath、または正規表現抽出機能を追加します。
  3. 結果をJMeterの変数名に格納します。
  4. 後からハードコードされた値を変数参照に置き換えてください。
  5. 抽出結果に一致するものがない場合は、明確にエラーとして処理を終了します。
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を実行したりはしません。

本番環境へのログイン画面を記録するのは安全ですか?

ステージング環境およびテスト環境のアカウントを優先してください。本番環境でのキャプチャには、明示的な承認と厳格な機密情報の取り扱いが必要です。