2015-05-04 553 views
1

我有一个为Amazon Kinesis构建Json的问题。 此JSON必须具有以下格式:在Jmeter中使用JSONObject和JSONArray

{ 
    "Records": [ 
     { 
      "Data": "XzxkYXRhPl8x", 
      "PartitionKey": "partitionKey1" 
     }, 
     { 
      "Data": "f1PxFQo92Afh", 
      "PartitionKey": "partitionKey2" 
     }, 
     { 
      "Data": "Gi4sEdd08HypA", 
      "PartitionKey": "partitionKey3" 
     } 
    ], 
    "StreamName": "exampleStreamName" 
} 

我使用的BeanShell采样以创建JSON作为缓冲:

import org.json.JSONArray; 
import org.json.JSONObject; 


//Dichiarazione variabili 
int timestampValue=(${startTime}+${i}+1); 
float current_powerValue=${current_power_1}+${__Random(0,10)}; 
String idValue=${__threadNum}+"_"+"5"; 
JSONObject part = new JSONObject(); 


//Create JSON 

part.put("timestamp",timestampValue); 
part.put("parent","${__threadNum}"); 
part.put("id",idValue); 
part.put("state","on"); 
part.put("today_kwh",65); 
part.put("current_power",current_powerValue); 
part.put("today_on_time",0); 
part.put("on_for",0); 
part.put("today_standby_time",0); 

//ADD json to array 
if(${i}%(${bufferSize}*${sample}-1)==0 && ${i}!=0 || ${i}==${totalNumber}-${endOfDb}){ 
    //Add to json variable the last json created 
    vars.put("json",vars.get("json")+part.toString()); 
    //Make an JSONObject by json variable of jmeter 
    JSONObject tempArray= new JSONObject(vars.get("json")); 
    log.info(tempArray.toString()); 
    //Add tempArray into JSONArray so that it adds square brackets 
    JSONArray records= new JSONArray(); 
    records.put(tempArray); 
    //Add the second field streamName 
    JSONObject kinesis = new JSONObject(); 
    kinesis.put("records",records); 
    kinesis.put("streamName","kinesis"); 
    //save into jsonBuffer 
    vars.put("jsonBuffer",kinesis.toString()); 
    //restart json variable 
    vars.put("json","");  
} 
else{ 
    //add new json into variable so to store it. 
    vars.put("json", vars.get("json")+part.toString()+","); 
} 

我使用JSON变量在JMeter的保存为每个iteraction的JSON和当“i”变量尊重if子句时,我开始创建json结构。 因此,我添加最后一个json到jmeter变量,然后创建一个JSONObject来存储这个json,但是当我这样做时它只存储一个json(因为它是一个对象)。 不幸的是,如果我存储在JSONArray中,它会添加“”,因为将变量json读作字符串。 最好的解决办法是只使用的JSONObject和JSONArray,但我如何使用相同的对象为所有iteractions(在JMeter的我无法使用JSONArray),其中 这是我的JMX enter image description here

回答

1

你可以在这个片段中TRT:

if(${i}%(${bufferSize}*${sample}-1)==0 && ${i}!=0 || ${i}==${totalNumber}-${endOfDb}){ 
vars.put("json",vars.get("json")+part.toString()); 
JSONArray records= new JSONArray("["+vars.get("json")+"]"); 
log.info(records.toString()); 
//records.put(tempArray); 
JSONObject kinesis = new JSONObject(); 
kinesis.put("records",records); 
kinesis.put("streamName","kinesis"); 
vars.put("jsonBuffer",kinesis.toString()); 
vars.put("json",""); 
} 
相关问题