在我们做接口自动化数据库断言中可能会遇到如下场景:
在我们发送接口的请求之后,我们想要断言的数据库的某字段结果是中间状态,不是我们想要的最终状态,需要等待几秒钟或者几分钟后数据库的这个字段才会更新我们想要的最终状态,这种情况如果我们不做处理的话,数据库断言肯定是失败的。
在这里我主要是分享一下我在实际工作中遇到这种断言场景是如何处理的。
思路很简单,就是如果实际结果与预期不符,则等待固定时间后再次取结果与预期比较。也就是循环的去比较实际结果与预期结果。
下面是实现代码的思路:
boolean flag = false;//比较结果成功的标志位
int count = 0;
int allCount = 6;//总循环次数
//如果实际结果与预期不符,则等待固定时间后再次取结果与预期比较
while(count<allCount){
merTradeInfo = busiDataService.getMertradeInfoBySerial(serial);
try {
log.info("请求出款接口");
Map<String, Object> params = new HashMap<>();
params.put("rpid", StringUtils.timeRpid());
params.put("settleSerial", merTradeInfo.get("SETTLE_SERIAL"));
params.put("settleMethod","00" );
String url= "http://"+autoLoadData.getUmfBusitimerServiceHosts() +":18091/umf-pay-service/pay/queryResult";
log.info("请求地址为:{}",url);
log.info("参数为:{}",params);
HttpClientUtils.sendHttpPostJson(url,params);
checkDbResultInfo(data, merTradeInfo);
flag = true;//成功则跳出循环
}catch (AssertionError e){
log.info("第{}次比对失败,失败信息【{}】",count+1,e.toString());
if(dbExp.containsKey("SETTLE_STATE")){//清算状态
Thread.sleep(8000);
}else{
Thread.sleep(2000);
}
count++;//不成功,则每次等2秒,循环5次,5次依然报错则报异常
}
if(flag){
break;
}
}
if(count == allCount){
checkDbResultInfo(data, merTradeInfo);
}
}
当然,可能还有其他的实现方案,欢迎留言讨论、分享,共同进步。
版权声明:本文为weixin_45608577原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。