Пользовательское утверждение JMeter - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть скрипт JMeter в следующем формате.

JMeter Structure

Дело в том, что после отправки запроса на запись на сервер ответ может входить в переменное число прочитанных ответов. Первые 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
}

1 Ответ

0 голосов
/ 22 апреля 2020

C 'mon, откуда вы знаете, что эти строки SampleResult.setSuccessful(false); и SampleResult.setResponseMessage("accountID page is not loaded"); "// НЕ РАБОТАЮТ", если у вас есть SampleResult.setIgnore();?

Если вы вызовете SampleResult.setIgnore();, вы не увидите сэмплер JSR223 ни в слушателях , ни в файле результатов .jtl , удалите эту строку, и она должна начать работать как и ожидалось или по крайней мере в соответствии со странными логиками c вашего Groovy скрипта.

Еще одна вещь: не включайте функции или переменные JMeter в сценарии Groovy, как указано в JSR223 Sampler документация:

При использовании этой функции, убедитесь, что ваш код скрипта не использует переменные JMeter непосредственно в коде скрипта, поскольку кэширование будет только кэшировать первую замену. Вместо этого используйте параметры сценария.

Правильный способ проверить наличие переменной JMeter:

if (vars.get('s_check') != null) {
    s1 = vars.get('s_check')
}

Дополнительная информация: Apache Groovy - Почему и как вы должны его использовать

...