SI尝试测试可能为null的JSON值。
首先我尝试使用jp @ gc - JSON Path Assertion。但是,如果它遇到空值,那么它似乎不会返回任何内容或定义变量。
所以我试图让它像这样工作:
我之前没有用Jmeter写过任何脚本,所以我可能会做一些明显错误的事情,但这是我在Beanshell Assertion中尝试的内容:
try {
String myValue = vars.get("myValue");
log.info("myValue =" + myValue);
}
catch (e) {
log.info( "caught exception: "+e );
String myValue = null;
}
if (myValue.length() > 0 && myValue != 0 ){
Failure = true;
FailureMessage = "myValue was " + myValue + ".";
}
else{
Failure = false;
}
对于此测试,空值实际上通过了测试。
我遇到的问题是try / catch块不起作用。相反,我在日志中看到以下消息:
jmeter.assertions.BeanShellAssertion: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import org.apache.jmeter.util.JMeterUtils; try { //myValue = JMeterUtils.get . . . '' : Attempt to resolve method: length() on undefined variable or class name: myValue
有谁能告诉我我做错了什么和/或如何让这个空JSON值测试工作?
答案 0 :(得分:2)
此代码中有许多错误的内容;
myValue
。那是因为它是在try-catch块中定义的。要修复,您必须在try-catch块之前声明String myValue
。但是... vars
不会抛出任何异常而是will return null when the given key does not exist。myValue
是否为空,请使用myValue != null
。这是更新后的代码:
String myValue = vars.get("myValue");
if(myValue != null){
log.info("myValue =" + myValue);
Failure = true;
FailureMessage = "myValue was " + myValue + ".";
}else{
//log something here?
Failure = false;
}
答案 1 :(得分:2)
您需要修改代码。
myValue
字符串未定义,您需要将其设置为“全局”正确的代码看起来很简单:
String myvalue = vars.get("json");
if (myvalue == null) {
Failure = false;
} else if (myvalue.length() > 0) {
Failure = true;
FailureMessage = "Expected \"myvalue\" to be null, Actual: " + myvalue;
}
答案 2 :(得分:0)
http://jmeter-plugins.org/wiki/JSONPathAssertion/
自jp @ gc v.1.2.1 - JSON Path Assertion以来,可以针对null值进行验证。但是,在撰写此评论时,它并不是稳定的版本。 可以从这里下载:http://jmeter-plugins.org/downloads/all/#Developer-Snapshots