Jmeter Beanshell提取json内容


本帖主要是请求帖子列表接口,使用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,如果没有报错则断言成功

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM