本帖主要是請求帖子列表接口,使用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,如果沒有報錯則斷言成功