import com.alibaba.fastjson.JSON; //引入JSON的类
String checkDb=vars.get("checkDb"); //获取是否校验数据库
log.info("checkDb:"+checkDb); //为了方便调试 我把信息输出了
if(checkDb.equals("true")){ //判断是否检查数据库
log.info("进入校验数据库"); //为了方便调试
String preDbMap=vars.get("DbMap"); //拿到预期数据库的值
int paramSize =bsh.args.length; //它是一个数组
if(paramSize>0){ //大于0 说明是有预期结果的
preDbMap =bsh.args[0];
}else{
preDbMap="没有预期数据库结果!!!!!"; //小于0 认为没有预期结果
}
preDbMap =preDbMap.trim(); //把预期结果去掉空格
log.info("preDbMap:"+preDbMap); //为了方便调试
List results=vars.getObject("resultList"); //拿到数据库返回的List对象,是查询数据库之后的数据
log.info("results对象:"+results); //为了方便调试
if(null!=results){ //如果results 等于null 说明数据库没有查询到数据,可能是绑定或者插入没有成功
int size=results.size(); //获取他的长度
log.info("results的SIZE:"+size); //为了方便调试
if(size>0){
log.info("进入到SIZE了:");
for(Map m:results){ //因为返回的List对象里面是一个MAP,所以是key和value的形式,可以用MAP的方式遍历循环
String dbMap =JSON.toJSONString(m); //拿到第一个对象的Map 进行转JSON字符串
dbMap =dbMap.trim(); //去掉空格
log.info("数据库JSON:"+dbMap); //为了方便调试
if(!preDbMap.equalsIgnoreCase(dbMap)){ //用预期的JSON串和查询到的结果JSON串进行对比
//如果不一样的情况下,说明数据库的断言失败,可能是程序的问题
String result =prev.getResponseDataAsString(); //拿到实际结果的值,用于存放到返回数据中
prev.setResponseCode("506"); //我们自定义了一个CODE码,告诉结果显示的CODE是这个
prev.setSuccessful(false); //设置结果为错误
prev.setResponseMessage("接口断言通过,数据库校验未通过"); //设置一个提示信息,大概是说明原因导致的
//写入结果返回的结果,还有数据库校验未通过,我们的预期数据库的值是,实际的值是,加上这个是为了方便定位问题
prev.setResponseData(result+",\n数据库校验未通过,\n预期值:"+preDbMap+",\n实际值:"+dbMap);
}
}
}else{
//当SIZE没有大于0的时候,说明也没有查询出来数据,可能没有绑定成功。
log.info("没有到SIZE了:");
//设置结果为错误
prev.setSuccessful(false);
//设置提示信息
prev.setResponseData("数据库没有返回信息,接口result:"+result);
}
}else{
log.info("result为null");
prev.setSuccessful(false);
prev.setResponseData("数据没有返回信息,接口result:"+result);
}
}else{
//当checkDb不等于true的情况下,可能是用户设置了这条用例不需要检查数据库
log.info("没有进入判断");
}