1. 概要

JMeter を使用したパフォーマンステストを行っている場合、HTTP基本認証プロトコルによって保護されているWebサービスに遭遇する可能性があります。

このチュートリアルでは、テスト中に必要な資格情報を提供するように ApacheJMeterを構成する方法を説明します。

2. 基本認証とは何ですか?

基本認証は、Webリソースを保護するために使用できる最も簡単なアクセス制御方法です。 これは、クライアントから送信されたHTTPヘッダーで構成されています。

Authorization: Basic <credentials>

ここで、クレデンシャルは、単一のコロン「:」で区切られた、ユーザー名とパスワードのBase64文字列としてエンコードされます。

HTMLフォームではなく、ブラウザのウィンドウでクレデンシャルが要求されたときに基本認証が使用されていることがわかります。 ブラウザにプロンプトが表示される場合があります。

したがって、セキュリティで保護されたWebリソースでJMeterテストを起動しようとすると、応答コードはHTTP 401になります。これは、「無許可」を意味します。 また、サーバーに必要な認証タイプを説明する「WWW-Authenticate」応答ヘッダーを受け取ります。 この場合、それは「基本」になります。

3. JMeterで基本認証を実装する簡単な方法

3.1. 認証ヘッダーの追加

資格情報を送信する最も簡単な方法は、資格情報をリクエストヘッダーに直接追加することです。 HTTPヘッダーマネージャーコンポーネントを使用すると、これを簡単に行うことができます。これにより、HTTPリクエストコンポーネントによって送信されたリクエストにヘッダーを追加できます。 ヘッダーマネージャーは、HTTPリクエストコンポーネントの子である必要があります。

HTTPヘッダーマネージャーの[構成]タブで、認証の詳細と承認を名前として使用してキー/値エントリを追加する必要があります。

オンラインツールを使用して文字列をエンコードし、ヘッダーマネージャーに貼り付けることができます。 エンコードされた資格情報の前に「基本」を追加するように注意する必要があります。

すべてがうまくいけば、サーバーから200の応答コードを受け取るはずです。

3.2. JSR223プリプロセッサを使用したクレデンシャルのエンコード

JMeterにクレデンシャルをエンコードさせたい場合は、 JSR223PreProcessorコンポーネントを使用できます。 テストプランで使用される資格情報を変更する場合は、これを使用する必要があります。

HTTPヘッダーマネージャーコンポーネントの前にJSR223プリプロセッサーを追加するだけです。

このコンポーネントを使用すると、実行時にスクリプトを実行できます。 クレデンシャルを取得してエンコードするスクリプトを提供する必要があります。 Javaを使用しましょう:

import org.apache.commons.codec.binary.Base64;

String username = vars.get("username");
String password = vars.get("password");
String credentials = username + ":" + password;
byte[] encodedUsernamePassword = Base64.encodeBase64(credentials.getBytes());
vars.put("base64Credentials", new String(encodedUsernamePassword));

ここで、ユーザー定義変数コンポーネントでユーザー名およびパスワード変数を定義する必要があります。

最後に、 HTTPヘッダーマネージャーコンポーネントで、エンコードされた資格情報を使用するようにAuthorizationヘッダーを設定する必要があります。

これで完了です。 すべてが正常に機能するはずであり、ユーザー定義変数の資格情報を簡単に変更できます。

4. HTTP認証マネージャーの使用

JMeterは、 HTTP Authorization Manager コンポーネントを提供して、認証のための資格情報の使用を容易にします。 このコンポーネントを使用すると、複数のドメインと認証プロトコルの資格情報を提供できます。このコンポーネントは、スレッドグループの子であり、HTTPリクエストコンポーネントの前に定義されている必要があります:

コンポーネントの[構成]タブで、認証に使用するユーザー名とパスワードを定義する必要があります。

ユーザー定義変数コンポーネントでユーザー名パスワードを定義した場合、このタブで変数を使用できます。 パスワードにも使えます。 まだマスクされていますが、 passwordフィールドに“ $ {password}”と入力できます。

認証用に正しいメカニズムを選択するように注意する必要があります。 ここでは、「BASIC」を選択します。

以上です! HTTPリクエストコンポーネントは、リクエストに Authorization ヘッダーを自動的に追加し、HTTP200OK応答コードを取得する必要があります。

5. HTTPAuthorizationManagerでの複数の資格情報の使用

テスト中に複数のクレデンシャルを使用したい場合があります。 これは、たとえば、役割に基づいてアクセス制限を検証する場合に役立つことがあります。

このテストケースを構成するには、テストプランに役立つ資格情報やその他の情報を保存するCSVファイルを作成する必要があります。 このファイルは、JMeterの CSV Data SetConfigコンポーネントによって読み取られます。 このコンポーネントは、スレッドグループの子である必要があり、各スレッドグループループのCSV行で繰り返されます。

次に、このコンポーネントで、以下を定義する必要があります。

  • ユーザー定義変数コンポーネント内のパスとしてのファイルの場所
  • CSVデータセットコンポーネントの実行後に設定される変数名
  • コンポーネントが最初の行を無視するかどうか–CSVファイルに列名がある場合に役立ちます
  • CSVファイルで使用されている区切り文字

CSVファイルで複数のクレデンシャルを定義する場合は、スレッドグループを構成して複数のループを実行するように注意する必要があります。

これらの設定を使用すると、リクエストヘッダーでさまざまな資格情報が使用されていることがわかります。

6. 結論

この記事では、HTTPリソースに対して基本認証がどのように機能するかを確認しました。

また、このプロトコルを使用して認証するためにApacheJMeterでテストプランを設定する方法も学びました。 JSR223プリプロセッサを使用してハードコードされたクレデンシャルについて説明し、CSVファイルから複数のクレデンシャルを提供しました。

いつものように、これらの例のコードはGitHubから入手できます。