Ошибка разбора при попытке получить значение переменной, извлеченной с помощью JSON Path Extractor в Jmeter

Я должен утверждать JSON ответ API. Поэтому извлекаем значение поля (состояния) с помощью JSON Path Extractor и сохраняем его в переменной (Optinurl)

"Состояние":"opted_in"

В Debug Sampler я вижу значение Optinurl как

Optinurl = [: "opted_in"]

Optinurl_1 = opted_in

Optinurl_matchNr = 1

Когда я пытаюсь получить значение переменной Optinurl в утверждении Beanshell, как показано ниже,

Строка optinValue = ${Optinurl}

я получил

ОШИБКА - jmeter.util.BeanShellInterpreter: Ошибка при вызове метода bsh: eval Полученный файл: встроенная оценка: String optinValue = '["opted_in"]';'' Token Parsing Error: Lexical error at line 1, column 23. Encountered: "\"" (34), after : "\'[" 2016/03/07 14:40:15 WARN - jmeter.assertions.BeanShellAssertion: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of:String optinValue = '["opted_in"]'; '' Ошибка разбора токена: лексическая ошибка в строке 1, столбец 23. Обнаружено: "\"" (34), после: "\'["

Заранее спасибо за помощь!

3 ответа

  1. В проекте подключаемых модулей JMeter есть JSON Path Assertion, я думаю, что вы можете делать с ним все, что вам нужно.
  2. Правильные способы инициализации переменной JMeter в Beanshell:

    • String optinValue = "${Optinurl}";

      или же

    • String optinValue = vars.get("Optinurl");
  3. Полученная ошибка не связана с вашим Optinurl инициализация переменной. Глядя в

    Лексическая ошибка в строке 1, столбец 23.

    Похоже, у вас есть какая-то синтаксическая ошибка в самой первой строке скрипта. Итак, варианты:

    • Дважды проверьте код, убедитесь, что круглые скобки, кавычки и т. Д. Совпадают, операторы заканчиваются точкой с запятой, кавычки в строках экранируются и т. Д.
    • Добавление debug(); строка в качестве первой строки вашего скрипта производит полный вывод отладки в STDOUT
    • Окружение вашего кода в блок try/catch позволяет получить более информативные ошибки

См. Как использовать BeanShell: Руководство по использованию любимых встроенных компонентов JMeter для получения более подробной информации об использовании Beanshell в ваших тестах JMeter.

Я думаю, что вы хотите хранить [ : "opted_in" ] в строковую переменную, так что используйте это:

String optionValue = vars.get ("Optinurl");

в ваше утверждение бобов и если вы хотите только opted_in сохранить в переменной, а затем использовать

String optionValue= vars.get("Optinurl_1");

Спасибо Дмитрию Каушлендре за ответ.

Я обновил свой скрипт, как показано ниже, и он отлично работает в графическом интерфейсе / командной строке. Поскольку vars.get ("Optinurl") возвращает ["opted_in"], поэтому пришлось сравнивать кавычки и квадратные скобки перед сравнением строк.

String optinValue = vars.get("Optinurl"). replace("[","").replace("]","").replace("\"","");
String expectedState = "${EXPECTED_STATE}";

log.info(optinValue);
log.info(expectedState);

if(!optinValue.equals(expectedState)){
    Failure = true;
    FailureMessage = "Values of state field for Campaign id " +  "${CAMPAIGN_ID}" +  " dont match "; 

}

Я не мог использовать String optinValue = vars.get ("Optinurl_1"), потому что он не работает, когда я запускаю тесты из командной строки (хотя работает нормально в режиме GUI)

Другие вопросы по тегам