接口如下
{
"UserArea": {
"infolist": [
{
"list": [
{
"area": [
"江苏省-苏州市"
],
"gg": "125×200×1000",
"gyslxr": "",
"gysphone": "",
"dw": "m",
"gysdz": "",
"mc": "花岗岩平石",
"supplier": "",
"bz": "",
"periods": "2020年5月",
"sl": "13",
"csj": "84.11",
"id": "7",
"brand": "",
"hsj": "94.8",
"extfds": ""
},
{
"area": [
"江苏省-苏州市"
],
"gg": "125×200×1000",
"gyslxr": "",
"gysphone": "",
"dw": "m",
"gysdz": "",
"mc": "花岗岩侧石",
"supplier": "",
"bz": "",
"periods": "2020年5月",
"sl": "13",
"csj": "84.11",
"id": "7",
"brand": "",
"hsj": "94.8",
"extfds": ""
}
],
"belongtype": "xxj"
},
{
"list": [
{
"area": [
"南京"
],
"gg": "综合",
"gyslxr": "",
"gysphone": "",
"dw": "t",
"gysdz": "",
"mc": "钢筋",
"supplier": "",
"bz": "",
"periods": "2020年3月",
"sl": "12.702755520813",
"csj": "3447.35",
"id": "7",
"brand": "",
"hsj": "3885.26",
"extfds": ""
}
],
"belongtype": "grk"
}
]
},
"ReturnInfo": {
"Description": "",
"Code": "1"
}
}
beanshell断言脚本:判断返回值内容是否匹配
//import org.json.JSONObject; //需要jmeter的lib/ext中放入 json.jar包
//import org.json.JSONArray; //导入jsonArray
import org.json.*; //直接导入所有json对象和数组,简单方便
String response_data = prev.getResponseDataAsString(); //获取响应信息,接口请求返回值,此处将http请求内的响应信息获取到String类型;
JSONObject object1 = new JSONObject(response_data); //承接上一行,将String类型的返回值构造成JSONObject对象
JSONObject ReturnInfo1 = (JSONObject)object1.getJSONObject("ReturnInfo"); //获取ReturnInfo里的信息,转换成Josnobject对象
String Code = ReturnInfo1.get("Code").toString(); //获取ReturnInfo里面code的值
JSONObject UserArea = (JSONObject)object1.getJSONObject("UserArea"); //获取UserArea jsonobject对象
JSONArray infolist = UserArea.getJSONArray("infolist"); //获取UserArea下的infolist数组
int len1 = infolist.length(); //获取infolist数组的长度
String mm =len1.toString(); //将长度转化为str字符串
String[] dyresul = new String[2]; //添加数组,这里对应的是自己设置的用户参数
dyresul[0] = ${test000};
dyresul[1] = ${test001};
String[] yqresul = new String[1];
yqresul[0] = ${test100};
public class Test4 {
public static Set compare(String[] a, String[] b) {
// 存储所有元素
Set allSet = new HashSet();//实例化HashSet类型的对象
// 存储相同的元素
Set sameSet = new HashSet();
allSet.addAll(Arrays.asList(a)); //将数组转换为list集合
for (String i : b) {
if(allSet.contains(i)) {
sameSet.add(i);
}
}
allSet.addAll(Arrays.asList(b));
// 移除相同的元素
allSet.removeAll(sameSet);
return allSet;
}
} //以上内容是取出2个数组中不同元素的方法脚本,后面会调用Test4类中的方法
if(Code.equals("1")) //如果code为1则表示接口正常,否则接口异常直接报错
{
if (mm.equals("2")) //判断infolist数组长度为1 (这里长度到底是多少?为什么要判断?)
{
for(int k = 0;k <len1;k++) //遍历infolist数组
{
JSONObject rs1 = (JSONObject)infolist.getJSONObject(k);
JSONArray list = rs1.getJSONArray("list"); //获取infolist下的list数组
int len2 = list.length();
String mm =len2.toString(); //这行什么意思?
String jsonStr = list.toString(); //将json型list数组转为json型字符串
// log.info("jsonstr ="+jsonStr); //输出json字符串
String[] result1 = new String[len2]; //创建一个长度为len2的字符串型数组,下面输出要用
(使用关键字new来创建一个对象也叫类的实例化)
for(int j = 0;j <len2;j++) //遍历list数组
{
JSONObject jsonTemp = (JSONObject)list.getJSONObject(j); //获取list数组下的对象
String liststr = jsonTemp.toString(); //对象jsonTemp转为字符串型
result1[j]= liststr;
//log.info("result1="+result1[j]); //输出result数组中每个值
}
new Test4(); //实例化Test类
if(k.toString().equals("0"))
{
Set dissameElementSet = Test4.compare(dyresul,result1); //通过实例化的Test4对象调用compare
for(String i : dissameElementSet)
{
if(i==null)
{ Failure = false; }
else{
FailureMessage = "与dyresul不匹配";
Failure = true; }
}
}
else{
Set dissameElementSet = Test4.compare(yqresul,result1);
for(String i : dissameElementSet)
{
if(i==null)
{ Failure = false; }
else{
FailureMessage = "与yqresul不匹配";
Failure = true; }
}}
}
}
else
{
FailureMessage = "infolist长度不对"; // 自定义的信息
Failure = true; // 表示断言失败
}
}
else {
FailureMessage = "code有误";
Failure = false; // 表示断言成功
}