我必须断言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),之后:" \' ["
提前感谢您的帮助!
答案 0 :(得分:2)
在Beanshell中初始化JMeter变量的正确方法是:
$(newElem).show(200, function() {
componentHandler.upgradeAllRegistered();
});
或
String optinValue = "${Optinurl}";
您获得的错误与String optinValue = vars.get("Optinurl");
变量初始化无关。展望
第1行第23栏的词汇错误。
在第一个脚本行中,您似乎遇到了一些语法错误。所以选项是:
Optinurl
行作为脚本的第一行产生对STDOUT的全面调试输出有关在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模式下工作正常)