Beanshell斷言


Beanshell斷言示例一:通過從數據庫查詢結果集,和從接口返回中解析json格式的返回內容,比較兩者來驗證sample請求是否成功

1>先通過JDBC PreProcessor把測試計划中所有接口請求涉及到的表的列名和對應的數據類型從information_schema庫的COLUMNS表中查詢出來存到一個變量里面

SELECT DISTINCT column_name, data_type

  FROM COLUMNS
 WHERE table_name IN ("t_bd_block",
                      "t_bd_build",
                      "t_bd_build_detail",
                      "t_bd_build_education",
                      "t_bd_build_hospital",
                      "t_bd_build_project",
                      "t_bd_build_schdist",
                      "t_bd_build_tag",
                      "t_bd_build_traffic",
                      "t_bd_floor",
                      "t_bd_house",
                      "t_bd_house_type",
                      "t_bd_picture",
                      "t_bd_project",
                      "t_bd_seo",
                      "t_bd_tag",
                      "t_bd_unit",
                      "t_bd_use",
                      "t_bd_use_sub",
                      "t_city",
                      "t_county",
                      "t_developer_company",
                      "t_idcenter",
                      "t_nation",
                      "t_poi",
                      "t_poi_education",
                      "t_poi_education_pic",
                      "t_poi_enrollment_plan",
                      "t_poi_graduation",
                      "t_poi_hospital",
                      "t_poi_station_pic",
                      "t_poi_sub",
                      "t_poi_subway_stations",
                      "t_poi_traffic_bus_station",
                      "t_poi_traffic_line",
                      "t_poi_traffic_line_station",
                      "t_poi_traffic_station",
                      "t_property_company",
                      "t_province",
                      "t_region",
                      "t_static_type");

 

2.jpg

 

2>把第1步中查出來的getColumnType解析出來,以鍵值對的形式存到變量vars供后面使用,因為json格式的數據有些類型的數據要加雙引號,有些不需要,這時候就需要知道字段類型來判斷下

2.jpg

ArrayList getColumnType1=vars.getObject("getColumnType");

ArrayList column_name = new ArrayList();

ArrayList data_type = new ArrayList();

for(HashMap row : getColumnType1){

   Iterator it = row.entrySet().iterator();

   while(it.hasNext()){

     Map.Entry pair = (Map.Entry)it.next();

    log.info(pair.getKey()+"="+pair.getValue());

     if(pair.getKey().toString().equals("column_name")){

        column_name.add(pair.getValue().toString());

    }else if(pair.getKey().toString().equals("data_type")){

           data_type.add(pair.getValue().toString());

      }

   }

}

for(int i=0;i<column_name.size();i++){

    vars.put(column_name.get(i).toUpperCase(),data_type.get(i));        

}

 

3>從數據庫中把要驗證的結果查詢出來存到變量里面,變量存的是結果集

1.jpg

 

4> 對結果進行斷言

ArrayList sqlResult1=vars.getObject("sqlResult");

String json = "";

if(sqlResult1.size()==0){

    json= "[]";  //如果jdbc request查詢結果為空,返回[]

}else{

    for(HashMap row : sqlResult1){

           String r="";

         Iterator it = row.entrySet().iterator();

         ArrayList keyAndValue = new ArrayList();

        while(it.hasNext()){

             Map.Entry pair = (Map.Entry)it.next();

             log.info("pair:"+pair);

             log.info(pair.getKey()+"="+pair.getValue());

            

                 if(pair.getValue()==null){

                     continue;

                     }else{

                             String[] subKey = pair.getKey().toString().split("_");

                                String key = subKey[0];

                               for(int k=1; k<subKey.length; k++){

                                    key += Character.toUpperCase(subKey[k].charAt(0))+ subKey[k].substring(1);

                            }

                                

                                if("varchar".equals(vars.get(pair.getKey().toString().toUpperCase())) || "char".equals(vars.get(pair.getKey().toString().toUpperCase())) || "text".equals(vars.get(pair.getKey().toString().toUpperCase()))){

                                    keyAndValue.add("\""+key+"\":\""+pair.getValue()+"\",");

                                }else{

                                    keyAndValue.add("\""+key+"\":"+pair.getValue()+",");

                                }        

                           

                     }

               

                        

                           

            } //while循環結束

             Collections.sort(keyAndValue);  

                         for(int i=0;i<keyAndValue.size();i++){

                             r+=keyAndValue.get(i);

                         }

                         r="{"+r.substring(0,r.length()-1)+"},";

                         json+=r;

                     

    

  }

  if(sqlResult1.size() > 1){

      json="{\"code\":\"0001\",\"data\":{\"A-G\":["+json.substring(0,json.length()-1)+"]},\"message\":\"ok\"}";

  }else{

      json="{\"code\":\"0001\",\"data\":{"+json.substring(0,json.length()-1)+"},\"message\":\"ok\"}";

  }

}

log.info(json);

String response_data = prev.getResponseDataAsString();

log.info(response_data);

import org.json.*;

log.info("進去了json對象");

JSONObject sql_data_obj = new JSONObject(json);

JSONObject response_data_obj = new JSONObject(response_data);

log.info("進去了json對象");

log.info("拿到了response的json對象"+response_data_obj);

log.info("拿到了sql的json對象"+sql_data_obj);

String responses_str = response_data_obj.get("data").get("A-G").toString();

String sqls_str = sql_data_obj.get("data").get("A-G").toString();

log.info("進去了responses的A-G"+responses_str);

JSONArray responses_array = new JSONArray(responses_str);

JSONArray sqls_array = new JSONArray(sqls_str);

//String[] result = new String[responses_array.length()];

boolean flag=true;

for(int i=0;i<responses_array.length();i++){

    JSONObject response_obj = new JSONObject(responses_array.get(i).toString());

    JSONObject sql_obj = new JSONObject(sqls_array.get(i).toString());

//    String name = app_obj.get("cityId").toString();

    Iterator it = response_obj.keys();  

            while(it.hasNext()){  

                //獲取map的key  

                String key = (String) it.next();

                System.out.println("key: "+key);

                //得到value的值  

                Object response_value = response_obj.get(key);

                Object sql_value=sql_obj.get(key);  

                if(!(sql_value.toString().equals(response_value.toString()))){

                    flag=false;

                    break;

                }

                //遞歸遍歷  

//                jsonObj.put(key, traveseJson(value));  

                  

            }  

//    result[i] = name;

}

//vars.put("result", Arrays.toString(result));

if(flag)//請求的response中有包含自定義字符,則斷言結果為false

{

    Failure=false;

    String message="${__time(yyyy-MM-dd HH:mm:ss,)} 結果比對成功";

    

    FailureMessage=message;

    log.info(FailureMessage);

    

}else

{

    Failure=true;

    String message="${__time(yyyy-MM-dd HH:mm:ss,)} 結果比對失敗";

    String response="本次請求response數據:"+prev.getResponseDataAsString()+"----------";

    String need_assert="需要斷言的數據:"+ json;

    FailureMessage=message+response+need_assert;

    

}

 

 

Beanshell斷言示例二:從SampleResult對象中獲取請求的響應結果碼,如果不是200,那就直接讓斷言失敗,如果成功,才去獲取json格式的返回內容中的某個值,然后判斷后再通過Fqilure對象去設置結果是成功還是失敗

Image [3].png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM