2013-12-20 90 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; 
    }