Ошибка разбора при попытке получить значение переменной, извлеченной с помощью 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 ответа
- В проекте подключаемых модулей JMeter есть JSON Path Assertion, я думаю, что вы можете делать с ним все, что вам нужно.
Правильные способы инициализации переменной JMeter в Beanshell:
String optinValue = "${Optinurl}";
или же
String optinValue = vars.get("Optinurl");
Полученная ошибка не связана с вашим
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)