Jmeter:使用Beanshell断言来测试一个空的JSON值



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值的测试工作吗?

这段代码中有很多错误的地方;

  1. 错误消息表示无法识别myValue。这是因为它是在try-catch块中定义的。要修复此问题,必须在try-catch块之前声明String myValue。但是
  2. 事实证明,您根本不需要try-catch块,因为vars不会抛出任何Exception,但当给定的键不存在时会返回null
  3. 要检查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. Beanshell不是很Java,除非您明确指定,否则将处理所有子句
  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;
}

http://jmeter-plugins.org/wiki/JSONPathAssertion/

自第1.2.1版起jp@gc-JSON路径断言可以针对null值进行验证。不过,在写这篇评论的时候,它还不是一个稳定的版本。可以从这里下载:http://jmeter-plugins.org/downloads/all/#Developer-快照

最新更新