У меня есть скрипт JMeter в следующем формате.
Дело в том, что после отправки запроса на запись на сервер ответ может входить в переменное число прочитанных ответов. Первые 4 ответа на чтение являются фиксированными, но после этого количество ответов на чтение зависит от времени работы сервера. Если сервер очень занят, он будет отправлять небольшие порции данных в паре из двух ответов на чтение. Вот почему я держал его в цикле контроллера до конца ответа.
Теперь, для подтверждения этого ответа, я проверяю строку в постпроцессоре и сохраняю вывод в переменную JMeter.
Наконец, я проверяю значения переменных в "JSR223 Sampler". Если я размещаю утверждение JSR223, оно применяется только к первым 4 ответам на чтение и игнорирует ответы в разделе Пока контроллер. Проблема, с которой я сталкиваюсь, ошибка не сообщается, если проверка текста не проходит. Однако он завершает итерацию и начинает новую.
JSR223 PostProcessor 1
String id=prev.getResponseDataAsString();
vars.put("ReadResponse",id);
if(id.contains("STRING TO FIND") == true)
{
vars.put("s_check", "true");
}
else
{
vars.put("s_check", "false");
}
JSR223 PostProcessor 2
String id=prev.getResponseDataAsString();
vars.put("ReadResponse",id);
if(id.contains("STRING TO FIND") == true)
{
vars.put("s_check_1", "true");
}
else
{
vars.put("s_check_1", "false");
}
JSR223 Sampler
SampleResult.setIgnore();
import org.apache.jmeter.threads.JMeterContext.TestLogicalAction;
import org.apache.jmeter.samplers.SampleResult;
//Final Response Assertion
String s1 = "N";
String s2 = "N";
if( ${__isVarDefined(s_check)} == true )
{
s1 = vars.get("s_check");
}
if( ${__isVarDefined(s_check_1)} == true )
{
s2 = vars.get("s_check_1");
}
if( (s1 == "false" && s2 == "false") || (s1 == "false" && s2 == "N") || (s1 == "N" && s2 == "false") )
{
SampleResult.setSuccessful(false); //NOT WORKING
SampleResult.setResponseMessage("accountID page is not loaded"); //NOT WORKING
ctx.setTestLogicalAction(TestLogicalAction.START_NEXT_ITERATION_OF_THREAD); //WORKING
}