I am using JMeter as a unit test tool, in parameterised calls where I expect some of the responses to be 500 internal server errors. I am using BeanShell Assertions to chec
Add a "Response Assertion" after the request you want to pass and the check the "Ignore Status" check box.
Another possible solution is to use Response Assertion with checked "Ignore Status" flag added to your sampler:
Ignore status
Instructs JMeter to set the status to success initially.The overall success of the sample is determined by combining the result of the assertion with the existing Response status. When the Ignore Status checkbox is selected, the Response status is forced to successful before evaluating the Assertion.
HTTP Responses with statuses in the 4xx and 5xx ranges are normally regarded as unsuccessful. The "Ignore status" checkbox can be used to set the status successful before performing further checks. Note that this will have the effect of clearing any previous assertion failures, so make sure that this is only set on the first assertion.
Using a BeanShell assertion, force the HTTP Sampler to pass and then pass/fail on a regular Beanshell assertion statement instead:
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;
}
UPD: please find most simple & "native" solution below:
In case if you want to do some tricky things in code use the following approach.
Access and modify SampleResult to change the status from "FAIL" to "PASS" if the code is 500 from your JSR223 Assertion or use JSR223 PostProcessor instead - they all have access to SampleResult Object.
1. JSR223 Assertion
if (ResponseCode.equals("500") == true) {
SampleResult.setResponseOK();
/* the same is
SampleResult.setSuccessful(true);
SampleResult.setResponseCodeOK();
SampleResult.setResponseMessageOK();
*/
}
2. JSR223 PostProcessor
Use prev
instead - to access SampleResult object of the sampler to which one post-processor is attached:
if (prev.getResponseCode().equals("500") == true) {
prev.setResponseOK();
/* the same is
prev.setSuccessful(true);
prev.setResponseCodeOK();
prev.setResponseMessageOK();
*/
}