數據準確性測試之【三】數據庫不同數據記錄的表

前面講過前端顯示內容、接口返回值的校驗 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章