2013-12-20 94 views
1

SI'm试图测试可能= null的JSON值。Jmeter:使用Beanshell Assertion测试null JSON值

首先我试着用jp @ gc - JSON Path Assertion。但是如果遇到空值,那么它不会返回任何东西或定义变量。

所以我试图让它像这样的工作:

  • 使用JP @ GC - JSON路径抽出来尝试值提取到一个变量。
  • 使用Beanshell断言来测试以查看变量是否存在或具有空值
  • 如果变量不存在或存在并且具有空值,那么我知道JSON值为空。

我没有写使用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; 
} 

对于这个测试,一个空值实际上通过了测试。

我遇到的问题是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

你可以显示服务器的响应? – olyv

回答

2

这段代码有很多错误的东西;

  1. 错误消息说它不识别myValue。这是因为它是在try-catch块中定义的。要修复,你必须在try-catch块之前声明String myValue。但是...
  2. 原来,你根本不需要try-catch块,因为vars不会抛出任何异常,但是不会抛出任何异常,但是will return null when the given key does not exist
  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; 
} 
2

你需要修改你的代码。

  1. Beanshell is not very 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; 
    }