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

时间:2012-03-20 11:20:30

标签: 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;
    }
}  

谢谢你,问候

4 个答案:

答案 0 :(得分:48)

另一种可能的解决方案是使用Response Assertion并将选中的“忽略状态”标记添加到您的采样器中:

  

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

     

样本的整体成功是通过组合来确定的   具有现有响应状态的断言结果。当。。。的时候   选中忽略状态复选框,强制响应状态   在评估断言之前成功。

     

在4xx和5xx范围内具有状态的HTTP响应通常被视为   不成功。 “忽略状态”复选框可用于设置   在进行进一步检查之前状态成功。请注意这一点   将具有清除任何先前的断言失败的效果,所以   确保这只在第一个断言上设置。

答案 1 :(得分:36)

UPD:请找到最简单的&下面的“原生”解决方案:


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

如果您的SampleResult代码为500或使用JSR223 Assertion,则访问并修改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来访问连接了一个后处理器的采样器的SampleResult对象:

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

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

答案 2 :(得分:-1)

在您要传递的请求后添加“响应断言”,并选中“忽略状态”复选框。

答案 3 :(得分:-2)

使用BeanShell断言,强制HTTP Sampler传递,然后在常规Beanshell断言语句上传递/失败:

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

    /* the same is 
    SampleResult.setSuccessful(true);
    SampleResult.setResponseCodeOK();
    SampleResult.setResponseMessageOK();
    */
}
String path = SampleResult.getURL().getPath();
if (!path.contains("anerror")) {
    Failure = true;
    FailureMessage = "URL Path: didn't contain \"anerror\"" +
        System.getProperty("line.separator") + "URL Path detected: " + path;
}