web-dev-qa-db-ja.com

JMeter 500の内部サーバーエラーを失敗させない方法

JMeterを単体テストツールとして使用しています。パラメーター化された呼び出しでは、応答の一部が500内部サーバーエラーであると予想しています。 BeanShellアサーションを使用して応答を確認しています。

応答に指定されたテキストが含まれている場合、500の内部サーバーエラーの一部を失敗としてマークしないでください。 500のサーバーエラーはすべて失敗としてマークされます。動作を変更することは可能ですか?

以下は、BeanShellアサーションからの抜粋です。

if (ResponseCode.equals("500")) {
    Failure = false;
    String respData = new String(ResponseData);

    if (! respData.contains("specific Text")) {
        Failure = true;
        FailureMessage = "500 Internal Server Error:  Unexpected Response.   " + 
            "Response Message: " + respData;
    }
}  

ありがとう、よろしく

30
Gazen Ganados

UPD:以下の最もシンプルで「ネイティブな」ソリューションを見つけてください:


コードでトリッキーなことをしたい場合は、次のアプローチを使用してください。

アクセスし、変更 SampleResultJSR223アサーション からコードが500の場合、ステータスを「FAIL」から「PASS」に変更するか、または JSR223 PostProcessor を使用します。代わりに-それらはすべてSampleResultオブジェクトにアクセスできます。

1。 JSR223アサーション

if (ResponseCode.equals("500") == true) { 
    SampleResult.setResponseOK();  

    /* the same is 
    SampleResult.setSuccessful(true);
    SampleResult.setResponseCodeOK();
    SampleResult.setResponseMessageOK();
    */
}

2。 JSR223 PostProcessor
代わりにprevを使用-1つのポストプロセッサーが接続されているサンプラーのSampleResultオブジェクトにアクセスするには:

if (prev.getResponseCode().equals("500") == true) { 
    prev.setResponseOK();  

    /* the same is 
    prev.setSuccessful(true);
    prev.setResponseCodeOK();
    prev.setResponseMessageOK();
    */
}
38

別の可能な解決策は、サンプラーに追加された「無視するステータス」フラグをオンにして Response Assertion を使用することです。

ステータスを無視
ステータスを最初に成功に設定するようにJMeterに指示します。

サンプルの全体的な成功は、アサーションの結果と既存の応答ステータスを組み合わせることによって決定されます。 [ステータスを無視]チェックボックスが選択されている場合、アサーションを評価する前に、レスポンスステータスが強制的に成功します。

4xxおよび5xxの範囲のステータスを持つHTTP応答は、通常、失敗したと見なされます。 [ステータスを無視]チェックボックスを使用して、さらにチェックを実行する前にステータスを成功に設定できます。これにより、以前のアサーションエラーをクリアする効果があることに注意してください。なので、これが最初のアサーションでのみ設定されていることを確認してください。

48

通過させたいリクエストの後に「Response Assertion」を追加し、「Ignore Status」チェックボックスをチェックします。