32

我在参数化调用中使用 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;
    }
}  

谢谢和问候

4

4 回答 4

55

另一种可能的解决方案是使用Response Assertion并在您的采样器中添加了选中的“Ignore Status”标志:

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

样本的整体成功是通过将断言的结果与现有的响应状态相结合来确定的。选择忽略状态复选框后,在评估断言之前,响应状态将被强制成功。

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

于 2012-03-29T18:49:58.510 回答
40

UPD:请在下面找到最简单和“本机”的解决方案:


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

如果您的JSR223 断言中的代码为 500,则访问并修改SampleResult以将状态从“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- 访问附加了一个后处理器的采样器的 SampleResult 对象:

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

    /* the same is 
    prev.setSuccessful(true);
    prev.setResponseCodeOK();
    prev.setResponseMessageOK();
    */
}
于 2012-03-20T15:52:06.087 回答
1

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

于 2015-12-23T17:33:27.370 回答
-2

使用 BeanShell 断言,强制 HTTP 采样器通过,然后在常规 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;
}
于 2015-06-23T21:58:40.587 回答