前置条件:
将json.jar包置于..\apache-jmeter-3.2\lib\下,并将该jar包添加到测试计划的Library中;否则会报:Typed variable declaration : Class: JSONObject not found in namespace的错误;
会使用到的方法:
①获取请求的返回值,即Json响应;
String response_data =prev.getResponseDataAsString(); //注意此处获取到的是String类型;
②将请求的返回值转换成json
JSONObject data_obj = JSONObject.parseObject(response_data);//转换成json对象
JSONObject JsonArr = parseArray(response_data ); //转换成json数组对象
③获取Json里的数据
JSONObject data = data_obj.getJSONObject("data"); //获取data
int total =data.getIntValue("total"); //获取data里的total
JSONArray rows = data_obj.getJSONObject("data").getJSONArray("rows");//获取data下的数组rows
④获取Json数组rows [ i ] 对象的第i个值
String number = rows.get(i).get("number").toString();//获取rows[i]下的number值
⑤获取rows[]数组的长度
int len= rows.size();
⑥把字符串转成 JSONArray 对象
JSONArray json = JSONArray.fromObject(str ); // 把字符串转成 JSONArray 对象
主要引用的包:
import com.alibaba.fastjson.JSONArray; //操纵数组
import com.alibaba.fastjson.JSONObject;
【下载地址】:https://www.mvnjar.com/com.alibaba/fastjson/1.2.49/detail.html
1.添加beanshell断言,填写脚本
//导入包
import java.util.Arrays;
import org.apache.jmeter.assertions;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.assertions.AssertionResult;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
String permissions=bsh.args[0];
//log.info("交付物权限:"+permissions); //用于调试值是否传入成功
String response_data = prev.getResponseDataAsString();//获取接口返回的response数据
//log.info("response_data:"+response_data); //用于调试值是否传入成功
JSONObject data_obj = JSONObject.parseObject(response_data);//转换成json
//判断code是否等于0 如果等于0 再取里面的字段
int code = data_obj.getIntValue("code");
//log.info("code:"+code); //用于调试值是否获取成功
if(code==0){
JSONObject data = data_obj.getJSONObject("data"); //获取data
//log.info("data:"+data);
int total =data.getIntValue("total"); //获取total
//log.info("total:"+ total); //用于调试值是否获取成功
//这里的total 是之前的接口返回获取的
//log.info("total:"+ total +"交付物权限:"+permissions); //用于调试值是否获取成功
if((total == 1 && permissions.equals("TRUE")) || (total == 0 && permissions.equals("0"))){
Failure = false; //设置成false 表示接口跑成功,在结果树中sample是绿色的
} else {
Failure = true;//直接判断失败,表示接口跑失败,在结果树中sample是红色的
//FailureMessage = "权限配置错误";
//prev.setStopThread(true);//如果断言失败,后面的接口不需要再跑,直接暂停
}
}
//log.info("断言结果:"+FailureMessage); //用于调试值是否获取成功