本帖主要是请求帖子列表接口,使用Beanshell 提取Json,并将提取出来的帖子id值与数据库查询结果做对比,两边一致,则断言成功,否则断言失败。
1.下载fastjson-1.2.49.jar包,将jar包放在Jmeter安装路径的lib文件夹下,并在Jmeter项目计划中选在该包即可,关闭Jmeter后重新打开,应该就成功导入了包了,如果不行,那就重启电脑吧,反正我是这么解决了。
2.接口请求,本例子是获取某个用户下的帖子列表
获取帖子列表返回的部分内容如下:
3.在该请求下新建一个BeanShell PostProcessor,主要目的是从返回结果中提取帖子id,并将id存放在变量中,以便后续使用
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONPath; import java.util.List; //获取获取请求的返回值 String response_data = prev.getResponseDataAsString(); //日志打印获取请求的返回值 log.info("---response_data---" + response_data); //将返回值转换成JSON对象 JSONObject data_obj= JSON.parseObject(response_data); log.info("------data_obj--------" + data_obj.toString()); //获取JSON中data列表 JSONArray data_arr = data_obj.getJSONArray("data"); log.info("---data_arr---" + data_arr); //获取Province数组的长度 int len = data_arr.size(); int i = 0; for(;i <= len;++i) { //获取 data[ i ] 数组对象 JSONObject jsonTemp = (JSONObject)data_arr.getJSONObject(i); String res_id = jsonTemp.getString("id"); //将帖子ID存储在res_id_ + i变量中,便于后期使用该变量 vars.put("res_id_" + i, res_id); }
4.获取接口返回的帖子id后,连接数据库
1)线程中新增JDBC Connection Configuration
2)编写SQL
5.在请求接口中,添加Beanshell Assertion,判断接口返回的数据与数据库返回的数据是否一致;
int M = ${post_id_#}; int i=0; int j=0; String post_id = ""; String res_id = ""; //boolean result = false; System.out.println(M); String[] post_ids = new String[M]; //声明字符串数组post_ids String[] res_ids = new String[M]; //声明字符串数组res_ids for(i=1; i<=M; i++){ post_id = vars.get("post_id_" + i); post_ids[i-1] = post_id; //将数据库查询出来的post_id值放在post_ids数组中 //System.out.println("--post_ids--" + post_ids[i-1]); } for(i=0; i<M; i++){ res_id = vars.get("res_id_" + i); res_ids[i] = res_id; //将数据库查询出来的res_id值放在res_ids数组中 //System.out.println("res_id--" + res_ids[i]); } //将post_ids和res_ids两个数组的元素进行比较,如果元素都相同,则断言成功,否则断言失败 for(i=0; i<M; i++){ System.out.println("res_ids:" + res_ids[i]); for(j=0; j<M; j++){ System.out.println("post_ids:" + post_ids[j]); if(res_ids[i].equals(post_ids[j])==true){ //System.out.println("OK"); Failure = false; //Failure是Beanshell Assertion中定义的断言参数,值为false,说明断言成功 FailureMessage = "OK"; //断言信息会打印在Jmeter cmd控制台中 break; //如果元素相同,则跳出内循环 } } }
6.查看断言结果
可以在线程中添加Assertion Results,如果没有报错则断言成功