jmeter beanshell Type-d variable declaration:Object constructorエラー
2926 ワード
データベースから値と応答値を比較するには、beanshellを使用します.
このスクリプトには、まず戻り値のオブジェクトを確立する前提があります.jmeterによってデータベースから検証が必要な数値を取得する場合は、javaオブジェクトフィールド名と一致するデータベースクエリ戻り値フィールド名を指定する必要があります.
Typed variable declaration:Object constructorに遭遇
データベース結果の配列は次のとおりです.
dbd=[{cardType=1, cardTypeText=, cardNo=62260906, bankType=1}]
cardTypeTextに値がないため,cardTypeTextを付与することで解決できる.
同じコードをeclipseで実行しても問題はありませんが、jmeterで問題があり、対空値のデフォルトの処理方法が異なる可能性があります.
import org.json.JSONArray;
import org.json.JSONObject;
res_str = prev.getResponseDataAsString();
JSONObject res_json_obj = new JSONObject(res_str);
JSONArray dbd_json_array = new JSONArray("${dbd}"); // json
JSONObject dbd_json_obj = new JSONObject();
FailureMessage = "";
Failure = true;
res_json_obj = new JSONObject(res_json_obj.get("data").toString());
if (!res_json_obj.isNull("list")) {
JSONArray res_json_array = new JSONArray(res_json_obj.get("list").toString());
log.info(" :" + res_json_array.length());
log.info(" :" + dbd_json_array.length());
if (res_json_array.length() == dbd_json_array.length()) {
for (int i = 0; i < dbd_json_array.length(); i++) {
Message = "
"+i+" :";
res_json_obj = res_json_array.getJSONObject(i);
dbd_json_obj = dbd_json_array.getJSONObject(i);
System.out.println(res_json_obj);
Iterator keys = dbd_json_obj.keys();
while (keys.hasNext()) {
String key = (String) keys.next();
String resvalue="";
String dbdvalue="";
System.out.println("key:" + key);
if (key.equals(null) || key.equals("")) {
Message += key + " ;";
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
if(res_json_obj.has(key) && dbd_json_obj.has(key)) {
resvalue = res_json_obj.getString(key);
dbdvalue = dbd_json_obj.getString(key);
}else {
Message += key + " ;";
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
if (resvalue.equals(dbdvalue)) {
Message += key + " ;";
Failure = false;
} else {
Message += key + " , :" + dbdvalue + ", :"+resvalue;
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
log.info("value:" + res_json_obj.get(key));
}
}
} else {
Message += " ;";
Message += " :" + res_json_array + "| :" + dbd_json_array;
FailureMessage += Message;
Failure = true;
log.info("value:" + res_json_obj.get(key));
break;
}
} else {
FailureMessage = " ";
log.info(FailureMessage);
Failure = true;
return;
}
このスクリプトには、まず戻り値のオブジェクトを確立する前提があります.jmeterによってデータベースから検証が必要な数値を取得する場合は、javaオブジェクトフィールド名と一致するデータベースクエリ戻り値フィールド名を指定する必要があります.
Typed variable declaration:Object constructorに遭遇
データベース結果の配列は次のとおりです.
dbd=[{cardType=1, cardTypeText=, cardNo=62260906, bankType=1}]
cardTypeTextに値がないため,cardTypeTextを付与することで解決できる.
同じコードをeclipseで実行しても問題はありませんが、jmeterで問題があり、対空値のデフォルトの処理方法が異なる可能性があります.