beanshell断言_Beanshell断言

beanshell断言_Beanshell断言Beanshell 断言示例一 通过从数据库查询结果集 和从接口返回中解析 json 格式的返回内容 比较两者来验证 sample 请求是否成功 1 gt 先通过 JDBCPreProce 把测试计划中所有接口请求涉及到的表的列名和对应的数据类型从 information schema 库的 COLUMNS 表中查询出来存到一个变量里面 SELECTDISTIN name data type

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”);

beanshell断言_Beanshell断言

2>把第1步中查出来的getColumnType解析出来,以键值对的形式存到变量vars供后面使用,因为json格式的数据有些类型的数据要加双引号,有些不需要,这时候就需要知道字段类型来判断下

beanshell断言_Beanshell断言

beanshell断言_Beanshell断言

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

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

}

3>从数据库中把要验证的结果查询出来存到变量里面,变量存的是结果集

beanshell断言_Beanshell断言

beanshell断言_Beanshell断言

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

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

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

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对象去设置结果是成功还是失败

beanshell断言_Beanshell断言

beanshell断言_Beanshell断言

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212736.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午7:23
下一篇 2026年3月18日 下午7:23


相关推荐

  • iocp详解_iocp是异步io吗

    iocp详解_iocp是异步io吗#include”SOCKET.h”#includeDWORDWINAPIThreadProc(LPVOIDpvParam);#definePORT8080#defineLISTEN_QUEUE200//AcceptEx和GetAcceptExSockaddrs的函数指针,用于调用这两个扩展函数LPFN_ACCEPTEX       

    2026年4月17日
    4
  • 英语时态=时间+状态

    英语时态=时间+状态十六种时态 时态的 时 指的是动态发生的时间 态 是即动作的状态 英语的句子中都可以找到这两者 时间轴 1 任何动作都会有 3 种状态 一般状态 正在发生 已经完成 2 在某个时点上正在发生的动作是进行时 这个时点可以是过去 现在 将来某个时点 3 在某个时点上已经完成的动作是完成时 这个时点可以是过去 现在 将来某个时点 4 如果动作不是正在进行 又不是已经完成 则用一般时态那么我们如何利用这个时间轴去理解我们 16 种英语时态呢 辨别方法我的理解是这样的 首先你要确定你要表达的东西是基

    2026年3月26日
    2
  • java工程师面试题及答案_实施工程师面试问题

    java工程师面试题及答案_实施工程师面试问题内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Linux等技术栈。

    2022年10月15日
    3
  • 游戏数值策划

    游戏数值策划游戏数值-拆解方法篇大家好,我是Alice,一名喜欢捣腾数字的游戏数值策划12345~o(* ̄▽ ̄*)ブ工作中我会经常拆解游戏数值,通过数值理解市面上优秀游戏的设计思路。今天想在这里跟大家分享一下我研究游戏数值的流程。如果各位有什么好方法,也请在评论区留言,期待看到你的想法。我平时拆解数值的流程主要分为六个阶段:准备阶段 数据收集 分析数据规律 提出猜想 根据数据验证猜想 拆解的应用不过在介绍具体流程之前,我想和你们先聊一下,数值拆解的目的。我认为数值拆解的目的大概可以分

    2022年5月5日
    49
  • 五子棋 人机对战 思路「建议收藏」

    五子棋 人机对战 思路「建议收藏」五子棋之人机对战思路:1,棋盘与棋子的实现2,玩家下完棋后,计算机要根据当前玩家所下的棋子找出最佳下棋点3,输赢的判断之前已经把人人对战的大概方法实现了,接下要实现的是人机的对战。我的思路如下(当然只是思路哈~还没具体实现呢):其实人机对战就是就在我们下完一步起后,通过电脑分析下一步该走哪,对此做出判断并在最佳的位置上出棋。1,首先需要定义权值,我做…

    2022年6月17日
    68
  • java constants_Java Constants类代码示例

    java constants_Java Constants类代码示例importorg apache storm Constants 导入依赖的 package 包 类 privatevoidi Stringtopo input topic Fieldsswitch newFields OFEMessageUt FIELD SWITCH ID OFEMessageUt FIELD STATE when

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号