尝试检索使用Jmeter中的JSON路径提取器提取的变量的值时的解析错误

时间:2016-03-07 20:04:24

标签: jmeter beanshell

我必须断言API的JSON响应。 所以使用JSON路径提取器提取字段(state)的值并将其保存在变量(Optinurl)中

"状态":" opted_in"

在Debug Sampler中,我将Optinurl的值视为

Optinurl = [ :" opted_in" ]

Optinurl_1 = opted_in

Optinurl_matchNr = 1

当我尝试在Beanshell断言中检索变量Optinurl的值时,如下所示,

String 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:字符串optinValue =' [" opted_in"]' ;''令牌解析错误:第1行第23列的词汇错误。遇到:" \"" (34),之后:" \' ["

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

  1. 通过JSON Path Assertion项目提供了JMeter Plugins,我相信您可以通过它完成所需的工作。
  2. 在Beanshell中初始化JMeter变量的正确方法是:

    • $(newElem).show(200, function() { componentHandler.upgradeAllRegistered(); });

    • String optinValue = "${Optinurl}";
  3. 您获得的错误与String optinValue = vars.get("Optinurl");变量初始化无关。展望

      

    第1行第23栏的词汇错误。

    在第一个脚本行中,您似乎遇到了一些语法错误。所以选项是:

    • 仔细检查您的代码,确保括号,引号等匹配,语句以分号结尾,字符串中的引号被转义等。
    • 添加Optinurl行作为脚本的第一行产生对STDOUT的全面调试输出
    • 将您的代码包围到try/catch block可以让您获得更多信息错误。
  4. 有关在JMeter测试中使用Beanshell的更多详细信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component指南。

答案 1 :(得分:1)

我认为你想将[ : "opted_in" ]存储到一个字符串变量中,所以请使用:

  

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

进入你的beanshell断言 如果您只想将opted_in存储到变量中,请使用

  

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

答案 2 :(得分:0)

感谢Dmitri,Kaushlendra回复。

我更新了我的脚本,如下所示,它在GUI /命令行中运行良好。由于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模式下工作正常)