概述
前面讲过前端显示内容、接口返回值的校验 Web页面相关的字段【一】、数据库查表记录的值和前端页面、接口返回值的校验 前端显示的值、接口返回值和数据库表里的记录【二】;这次来说下 数据库不同表的部分字段校验;实际这部分就是取记录,筛选需要的字段值,也没啥好说的,主要是分享下我遇到的情景。
个人博客:https://blog.csdn.net/zyooooxie
情景
我们的系统会从另一个业务系统拿到订单表t_amount_record,后台根据需求将其处理后,组成了我们的t_recharge_order;
因为订单交易会有退款的可能,所以业务系统将状态的字段定为status,其值91对应退款,101代表签收;另一个字段create_time对应签收时间【状态为101】退款时间【状态为91】;
我们的表结构如下:【设置了order_receive_time、order_refund_time】
最初我知道前端页面的数据来自业务系统的表t_amount_record,就直接做了接口返回值 和 数据库这表t_amount_record的校验;后来,后台处理好,又做了接口返回值 和 数据库t_recharge_order的校验;后来想到,其实应该做 2张表 记录的校验,也就有了这篇分享。
代码
1.业务系统表t_amount_record和接口返回值的校验
# 需要传入app_id、create_time
sql2 = 'SELECT * FROM `t_amount_record` WHERE app_id = %d AND `status` = 101 AND create_time < %d AND create_time > %d ;' % (
app_id, sjc[1], sjc[0])
cur.execute(sql2)
data2 = list(cur.fetchall()) # 签收订单的list
sql3 = 'SELECT * FROM `t_amount_record` WHERE app_id = %d AND `status` = 91 AND create_time < %d AND create_time > %d ;' % (
app_id, sjc[1], sjc[0])
cur.execute(sql3)
data3 = list(cur.fetchall()) # 退款订单的list
for i in data3:
for d in data2:
if i[3] == d[3]:
# 去除相同order的签收单,增加退款单【退款单 增加一个签收时间】
data2.remove(d)
data2.append(i + (d[-1],))
break
list_e = []
for i in data2:
t_d = dict()
# 依据接口返回值来决定key
t_d['vendorId'] = vendor_id
if i[4] == 101:
t_d['status'] = 101 # 'Received'
t_d['orderReceiveTime'] = TestM().time_change1(i[-1])
t_d['orderRefundTime'] = ''
else:
t_d['status'] = 91 # 'Refunded'
t_d['orderReceiveTime'] = TestM().time_change1(i[-1])
t_d['orderRefundTime'] = TestM().time_change1(i[-2])
list_e.append(t_d)
list_e就是自己处理后的数据明细list,和接口返回的list做个对比,即可。
2.业务系统表t_amount_record和自己表t_recharge_order的校验
# 业务表 t_amount_record查询此id的所有记录
sql3 = "SELECT * FROM `t_amount_record` WHERE app_id = %d AND status IN (91, 101);" % data2[0][0]
cur.execute(sql3)
data3 = cur.fetchall() # data3元素内字段值肯定没重复,可set
list_end = [list(e) for e in data3]
list_end1 = [e[3] for e in list_end] # 所有order_id放到list_end1
list_end2 = [i for i in list_end1 if list_end1.count(i) == 1] # list_end2是签收单
list_Back = list()
list_Received = list()
list_Refunded = list()
for e in data3:
t2 = dict()
t2['order_id'] = e[3]
if e[3] in data3:
t2['order_receive_time'] = e[-1]
t2['order_refund_time'] = None
# 正常的情况 e[4]只能是101
assert e[4] == 101
t2['status'] = e[4]
list_Back.append(t2) # 签收订单
elif e[4] == 91 and e[3] not in list_end2:
t2['status'] = e[4]
t2['order_refund_time'] = e[-1]
t2['order_receive_time'] = None
list_Refunded.append(t2) # 退款订单的退款
elif e[4] == 101 and e[3] not in list_end2:
t2['order_receive_time'] = e[-1]
list_Received.append(t2) # 退款订单的签收
else:
raise AssertionError # 其他不确定的情况
for i in list_Received:
for a in list_Refunded:
if i['order_id'] == a['order_id']:
i.update(a) # 签收时间的字段 order_receive_time更新
list_Back.extend(list_Received) # 退款订单
这是对业务系统表t_amount_record的处理;list_Back与 表t_recharge_order的list做个对比,即可。
2份代码的思路不同:上面是两次Select,分别查签收、退款的订单记录,下面是1次Select所有签收+退款的订单记录;
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie
最后
以上就是生动香水为你收集整理的数据准确性测试之【三】数据库不同数据记录的表的全部内容,希望文章能够帮你解决数据准确性测试之【三】数据库不同数据记录的表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复