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