2016-08-31 13 views
3

私はBeanShellのポストプロセッサを使用してJSON配列の1つの変数の値を抽出しようとしていますが、私は、ログ内のすべての応答を取得していない午前抽出JSONレスポンス

私のJSONはやや次のようになります。

"store": 
 
: [ 
 
: : { 
 
: : : "storeId":12345, 
 
: : : "storeName":"ABC", 
 
: : : "storeAddress":"DEFGHIJKL", 
 
: : : "storeMinOrderAmount":100, 
 
: : : "mobile":"+911234567890", 
 
: : : "mobileSecondary":null, 
 
: : : "city":"Somewhere", 
 
: : : "pincode":123456, 
 
: : : "country":"India", 
 
: : : "email":"[email protected]", 
 
: : : "pickup":true, 
 
: : : "delivery":false, 
 
: : : "storeSplashPath":null, 
 
: : : "storeSplashType":null, 
 
: : : "distance":"0.10" 
 
: : },

そして、私のBeanShellのポストプロセッサは、次のとおりです。

import org.apache.commons.lang3.StringUtils; 
import org.json.JSONArray; 
import org.json.JSONObject; 
import com.eclipsesource.json.*; 

print("*******************"); 

//Get Store total count 
int totalStoreNumber = StringUtils.countMatches(new String(data), "storeId"); 
print("Total Number of Stores are: " + totalStoreNumber); 

if (totalStoreNumber > 0) { 
//Check for Fulfilment type is "Pickup" 
String jsonString = prev.getResponseDataAsString(); 
JsonObject store = JsonObject.readFrom(jsonString); 
JsonArray store = store.get("store").asArray(); 
String pickup = store.get(1).asObject().get("pickup").asString(); 
vars.put("fulfilmentType_BSH", pickup); 
print("Is Pickup allowed: " + pickup); 
} 
else { 
print("No Stores Nearby"); 
} 

どこが間違っているのか分かりません。私は関連するクエリを読んだが、この権利を得ることができませんでした。 アイデア?

答えて

6

まず、JSON Path PostProcessorを使ってみませんか?あなたはまだBeanShellの中でそれを行う必要があり、何らかの理由で、私はいくつかのアイデアを持っている場合は

$.store[0].pickup 

:あなたは次のように単一の単純なJSON Path式を使用して、絶対に同じことを得ることができます

  1. これは間違いですエラー。 Beanshellスクリプトで同じ名前の2つの変数を宣言することはできません

    JsonObject store = JsonObject.readFrom(jsonString); 
    JsonArray store = store.get("store").asArray(); 
    //  ^^^^^ ka-boom! 
    
  2. 考えられる問題です。 IndexOutOfBoundsException応答にストアが1つしかない場合。 BeanShellのではコレクションがゼロベースされ、第一の要素は

    import org.json.JSONArray; 
    import org.json.JSONObject; 
    import com.eclipsesource.json.*; 
    

    はあなたに関連するjarファイルを追加しただけの場合は別の可能性のある問題は、あなたの輸入に関する可能性が0

    String pickup = store.get(1).asObject().get("pickup").asString(); 
    //      ^ka-boom! 
    
  3. のインデックスを、持っていますJMeter Classpathこの後にJMeterを再起動しましたか?メソッドを正しく使用していますか?ここで

のJMeter 3.0が付属していますjson-smart(あなたが他のjarファイルを必要としない)

import net.minidev.json.JSONArray; 
import net.minidev.json.JSONObject; 
import net.minidev.json.parser.JSONParser; 
import org.apache.commons.lang.StringUtils; 

//Get Store total count 
int totalStoreNumber = StringUtils.countMatches(new String(data), "storeId"); 
log.info("Total Number of Stores are: " + totalStoreNumber); 

if (totalStoreNumber > 0) { 
    //Check for Fulfilment type is "Pickup" 
    String jsonString = new String(data); 
    JSONParser parser = new JSONParser(JSONParser.MODE_JSON_SIMPLE); 
    JSONObject store = (JSONObject) parser.parse(data); 
    JSONArray storeArray = (JSONArray) store.get("store"); 
    String pickup = ((JSONObject) storeArray.get(0)).getAsString("pickup"); 
    vars.put("fulfilmentType_BSH", pickup); 
    log.info("Is Pickup allowed: " + pickup); 
} else { 
    log.info("No Stores Nearby"); 
} 

とその作業

Beanshell JSON demo

の証拠を使用してコードの再実装です

JMeterテストでBeanshellスクリプトを使用する方法の詳細は、How to Use BeanShell: JMeter's Favorite Built-in Componentガイドを参照してください。

関連する問題