SI正在尝试测试一个可能为=null的JSON值。
首先我尝试使用jp@gc-JSON路径断言。但如果遇到null值,它似乎不会返回任何内容或定义变量。
所以我试着让它像这样工作:
- 使用jp@gc-JSON路径提取器,用于尝试提取变量的值
- 使用Beanshell断言测试变量是否存在或具有null值
- 如果变量不存在,或者存在并且具有null值,那么我知道JSON值为null
我以前没有用Jmeter写过任何脚本,所以我可能做了一些明显错误的事情,但以下是我在Beanshell断言中尝试的内容:
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;
}
对于这个测试,一个null值实际上通过了测试。
我遇到的问题是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值的测试工作吗?
这段代码中有很多错误的地方;
- 错误消息表示无法识别
myValue
。这是因为它是在try-catch块中定义的。要修复此问题,必须在try-catch块之前声明String myValue
。但是 - 事实证明,您根本不需要try-catch块,因为
vars
不会抛出任何Exception,但当给定的键不存在时会返回null - 要检查
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;
}
您需要修改您的代码。
- Beanshell不是很Java,除非您明确指定,否则将处理所有子句
- 您的
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;
}
http://jmeter-plugins.org/wiki/JSONPathAssertion/
自第1.2.1版起jp@gc-JSON路径断言可以针对null值进行验证。不过,在写这篇评论的时候,它还不是一个稳定的版本。可以从这里下载:http://jmeter-plugins.org/downloads/all/#Developer-快照