JMeter如何不失败500内部服务器错误

Gaz*_*dos 28 jmeter assertion

我使用JMeter作为单元测试工具,在参数化调用中,我希望一些响应是500内部服务器错误.我正在使用BeanShell Assertions来检查响应.

如果响应包含指定的文本,我希望500个内部服务器错误中的一些不被标记为失败.所有500个服务器错误都标记为失败.是否有可能改变行为?

以下是BeanShell Assertion的摘录.

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;
    }
}  
Run Code Online (Sandbox Code Playgroud)

谢谢你们

Ali*_*lik 48

另一种可能的解决方案是使用响应断言,并将选中的"忽略状态"标记添加到您的采样器:

忽略状态
指示JMeter最初将状态设置为成功.

通过将断言的结果与现有的响应状态相结合来确定样本的总体成功.选中"忽略状态"复选框后,在评估"断言"之前,会强制响应状态成功.

具有4xx和5xx范围内状态的HTTP响应通常被视为不成功.在执行进一步检查之前,"忽略状态"复选框可用于设置状态成功.请注意,这将清除任何先前的断言失败,因此请确保仅在第一个断言上设置此操作.

  • 这正是我所需要的.我不想像你的其他答案中所建议的那样将响应更改为OK ...我想声明响应是正确的错误(在我的情况下,404 Not Found).那谢谢啦! (2认同)
  • 完美的。我需要检查 401。谢谢! (2认同)

Ali*_*lik 38

UPD:请在下面找到最简单的"原生"解决方案:


如果你想在代码中做一些棘手的事情,请使用以下方法.

如果JSR223断言中的代码为500 或使用JSR223 PostProcessor,则访问和修改SampleResult以将状态从"FAIL"更改为"PASS" - 它们都可以访问SampleResult对象.

1. JSR223断言

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

    /* the same is 
    SampleResult.setSuccessful(true);
    SampleResult.setResponseCodeOK();
    SampleResult.setResponseMessageOK();
    */
}
Run Code Online (Sandbox Code Playgroud)

2. JSR223 PostProcessor
使用prev- 来访问连接一个后处理器的采样器的SampleResult对象:

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

    /* the same is 
    prev.setSuccessful(true);
    prev.setResponseCodeOK();
    prev.setResponseMessageOK();
    */
}
Run Code Online (Sandbox Code Playgroud)

  • 这会更改响应代码.你的另一个答案是一个更好的解决方案imo (3认同)