JMeterを使用して、Webサービスの基本認証プロセスを暗示しようとしています。ただし、エラー401:Unauthorizedがスローされるたびに。 HTTPヘッダーマネージャーを使用して、ヘッダーの承認と値を追加しようとしました。それでも動作しません。また、HTTP認証マネージャーを使用してみました。まだ運がありません。誰か助けてもらえますか。
JMeterからのリクエストをデバッグすることで、HTTP Authorization Managerモジュールがユーザー名とパスワードを正しくエンコードしないことがわかりました。ユーザー名の後に改行文字を置きます。
Basic Authで保護されたエンドポイントに対してJMeterテストを実行するには、HTTP Header Managerを含め、Basic Authヘッダーを自分で追加します。
MacOSまたはLinuxから:
echo -n "username:password" | base64
Windowsから:
here に進み、「username:password」文字列をエンコードします
HTTPヘッダーマネージャーで、名前が「Authorization」で値が「Basic [上記のエンコードされた資格情報]」のエントリを追加します
JMeter 3.2の2017年8月19日編集:
基本的に基本認証をバイパスするには、Authorizationヘッダーに値Basic base64(username:password)を追加する必要があります。問題は、JMeterにbase64関数が組み込まれていないことです。
解決策は次のとおりです。
Step1AddBeanShell PreProcessor(PreProcessor-> BeanShell Preprocessor)
Step2次のスクリプトをプリプロセッサに追加します
import org.Apache.commons.codec.binary.Base64;
byte[] encodedUsernamePassword = Base64.encodeBase64("neo4j:1234".getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));
Step3HTTPヘッダーマネージャーの追加
Step4正しい値でAuthorizationヘッダーを追加
ヘッダー名Authorization
header valueBasic $ {base64HeaderValue}(base64HeaderValue変数はBeanShellプリプロセッサによって初期化されます)
そのため、最終的にhttpリクエストを作成すると、Base64エンコード文字列とともにAuthorizationヘッダーがサーバーに渡されます
以下をせよ:
1/ HTTP Authorization Manager すべての必須フィールドを正しく設定します
2 /オプション1:HTTP 4の使用:(デフォルト)
jMeter 3.2以降、承認マネージャを使用した追加設定なしで可能です。
オプション2:HTTP 3.1の使用:(非推奨)
jmeter.propertiesで、コメント解除します:
httpclient.parameters.file=httpclient.parameters
httpclient.parametersで、コメント解除します。
http.authentication.preemptive$Boolean=true
ベースURLのプロトコル、つまり「localhost」ではなく「 http:// localhost 」を指定してください。
Ryan Tが言ったように、HTTPヘッダーマネージャーで、名前"Authorization"
と値"Basic [encoded credentials from above]"
を持つが、[]
なしのエントリを追加します。
上記の最初の回答を参照すると、Apache 3.1はHTTP Auth Managerでusername:passwordを正しくエンコードしているように見えるため、言及した誤ったエンコードの問題を修正する必要があります。
ユーザー定義変数のユーザー名とパスワードを使用する@yurkoのわずかなバリエーションを追加します。 (3.2より前のJmeterの場合)
import org.Apache.commons.codec.binary.Base64;
String username = vars.get("USERNAME");
String password = vars.get("PASSWORD");
String combineduserpass = username + ":" + password;
byte[] encodedUsernamePassword = Base64.encodeBase64(combineduserpass.getBytes());
vars.put("base64HeaderValue",new String(encodedUsernamePassword));