数据准确性测试之【三】数据库不同数据记录的表

前面讲过前端显示内容、接口返回值的校验 Web页面相关的字段【一】、数据库查表记录的值和前端页面、接口返回值的校验 前端显示的值、接口返回值和数据库表里的记录【二】;这次来说下 数据库不同表的部分字段校验;实际这部分就是取记录,筛选需要的字段值,也没啥好说的,主要是分享下我遇到的情景。

情景

我们的系统会从另一个业务系统拿到订单表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

发布了78 篇原创文章 · 获赞 24 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zyooooxie/article/details/101163322