數據準確性測試之【四】表記錄新增、修改、刪除,對其他字段值的影響

之前所有關於準確性測試部分的分享講的都是 去查詢,好似去數據庫執行Select語句;這次想說的是 去增加、去修改某些記錄,好似去執行Update和Insert語句;

情景一 新增表記錄、刪除表記錄

下圖是 在前端頁面對於充值明細進行補充(實爲新增表記錄);
【增加一條表記錄,某天的充值明細會增加這條記錄,當天的充值明細list 前後可做對比;此外匯總頁 當天這條記錄的部分字段值也會改變】

在這裏插入圖片描述
【接口 實現】

代碼思路:先查詢彙總頁當天記錄的某字段,在查詢當天的充值list;增加充值記錄;第二次查詢當天的充值list,對比多的元素是否和增加的一致;第二次查詢彙總頁當天記錄的某字段,對比前後字段值的改變;

    def Comparison(self, vendor_id, vendor_name, recharge_time):
        # 增加
        be_report = self.report(vendor_id, vendor_name, recharge_time)
        be_list = self.detail(vendor_id, recharge_time)
        up = self.upload(vendor_id, vendor_name, recharge_time)
        af_list = self.detail(vendor_id, recharge_time)
        diff_list = [i for i in af_list if i not in be_list]
        assert up[0] == diff_list[0]['某字段']
        assert up[1] == diff_list[0]['某字段']
        print('增加記錄成功')
        af_report = self.report(vendor_id, vendor_name, recharge_time)
        assert af_report == be_report + up[1]
        print('彙總頁 字段值-add-更改成功')

        # 刪除
        d = self.Delete(vendor_id, recharge_time)
        after_report = self.report(vendor_id, vendor_name, recharge_time)
        after_list = self.detail(vendor_id, recharge_time)
        assert after_report == af_report - d['某字段']
        print('彙總頁 字段值-delete-更改成功')
        different_list = [d for d in af_list if d not in after_list]
        assert different_list[0] == d
        print('刪除記錄成功')

在這裏插入圖片描述

通過接口去實現這些操作,實際會有後臺在重新梳理當天的記錄,如果是直接在表裏insert記錄,沒辦法去觸發,有個修復數據的接口可以實現重新計算,故而下面代碼 有2處調到數據修復的接口;

【連接數據庫 實現】

代碼思路:未插入新紀錄前,調取接口查某字段值;數據庫篩選出符合條件的記錄,計算某字段值;插入新紀錄,數據庫表裏重新篩選計算某字段值;接口修復數據後,看接口返回某字段 新值;斷言 前後字段值的改變 ;【刪除操作 類似】

    def Comparison2(self, vendor_id, vendor_name, recharge_time):
        old_CIP = self.report(vendor_id, vendor_name, recharge_time)
        print(old_CIP, '未插入新紀錄前 接口返回的 某字段值')
        db = self.db_value(vendor_id, vendor_name, recharge_time)
        print(db[0], '未插入新紀錄前 數據庫計算出來的 某字段值')
        insert = self.db_insert(vendor_id, vendor_name, recharge_time)
        assert db[0] + insert[1] == insert[0]
        print(insert[0], db[0], insert[1], '數據庫計算-新、舊、此次充值')

		# 數據修復
        self.s.get(self.fix_url(self.url_fix, 1, vendor_id, recharge_time, recharge_time))
        new_CIP = self.report(vendor_id, vendor_name, recharge_time)
        assert new_CIP == old_CIP + insert[1]
        print('接口返回值-新、老、此次充值', new_CIP, old_CIP, insert[1])

        delete = self.db_delete()
        print('數據庫計算-新、老、此次刪除的', delete[0], insert[0], delete[1])

        assert db[1] + 1 == insert[2]
        assert insert[2] - 1 == delete[2]
        
		# 數據修復
        self.s.get(self.fix_url(self.url_fix, 1, vendor_id, recharge_time, recharge_time))

        new_P = self.report(vendor_id, vendor_name, recharge_time)
        assert new_P == new_CIP - delete[1]
        print('接口返回-新、老、此次刪除的', new_P, new_CIP, delete[1])

在這裏插入圖片描述
結果圖也顯示接口返回值和數據庫計算值相符;

不過 我在Delete刪除某記錄,是物理刪除,完全查不到此條記錄;後臺同事在這一部分是邏輯刪除,記錄變成“被刪除狀態”;

情景二 修改表記錄

1.前端頁面上傳某些Excel,系統會在解析後往表裏增加某些記錄;
在這裏插入圖片描述

2.對某些記錄進行編輯、確定、作廢之類的操作,會更改狀態或某些字段值,故而對彙總頁面的部分字段值做了新改變;

在這裏插入圖片描述

三個操作這兒拿 確定Confirm 來做例子:

    def Uploading_Supplier_Orders(self, vendor_id, vendor_name, xlsx):
        Log.info('*********************************')
        # 上傳前
        ex = self.Excel_read(xlsx)
        summary_1 = self.summary_report(vendor_id)

        # 上傳
        self.upload(vendor_id, xlsx)

        # TODO 只有對磁盤上的數據進行更新時,纔會調用 commit()
        # self.db.commit()

        batch_report_1 = self.batch_report(vendor_id, ex[0], vendor_name)

        assert batch_report_1[1] == int(ex[1])
        assert batch_report_1[1] == batch_report_1[2] + batch_report_1[3]

        summary_2 = self.summary_report(vendor_id)

        if batch_report_1[0] is None:
            assert summary_2[0] == summary_1[0]
        else:
            assert summary_2[0] == summary_1[0] + batch_report_1[0]
        assert summary_2[1] == summary_1[1] + batch_report_1[1]
        assert summary_2[2] == summary_1[2] + batch_report_1[2]
        assert summary_2[3] == summary_1[3] + batch_report_1[3]

        Invalid = self.Status(vendor_id, vendor_name, ex[0], 3)
        Confirmed = self.Status(vendor_id, vendor_name, ex[0], 2)
        assert Invalid[0] == 0
        assert Invalid[1] == 0
        assert len(Invalid[2]) == 0
        assert Confirmed[0] == 0
        assert Confirmed[1] == 0
        assert len(Confirmed[2]) == 0

        Unconfirmed = self.Status(vendor_id, vendor_name, ex[0], 1)
        assert Unconfirmed[0] == int(ex[1])
        assert len(Unconfirmed[2]) == len(ex[2])

        return ex, batch_report_1, summary_1

    def calibration_Confirm(self, vendor_id, vendor_name, ex, batch_report_1, summary_1):
        """確定操作"""

        self.confirm(ex[0])
        time.sleep(1)

        qd_Invalid = self.Status(vendor_id, vendor_name, ex[0], 3)
        assert qd_Invalid[0] == 0
        assert qd_Invalid[1] == 0
        assert len(qd_Invalid[2]) == 0

        qd_Confirmed = self.Status(vendor_id, vendor_name, ex[0], 2)
        assert qd_Confirmed[0] == ex[3]
        assert len(qd_Confirmed[2]) == 1

        qd_Unconfirmed = self.Status(vendor_id, vendor_name, ex[0], 1)
        assert qd_Unconfirmed[0] == ex[1] - ex[3]
        assert len(qd_Unconfirmed[2]) == len(ex[2]) - 1

        batch_report_2 = self.batch_report(vendor_id, ex[0], vendor_name)
        assert batch_report_2[2] == qd_Confirmed[0]
        assert batch_report_2[3] == qd_Unconfirmed[0]
        assert batch_report_2[1] == batch_report_2[2] + batch_report_2[3]
        assert batch_report_2[1] == batch_report_1[1]
        assert (batch_report_2[0] if batch_report_2[0] is not None else 0) == qd_Unconfirmed[1] + qd_Confirmed[1]
        assert batch_report_2[1] == qd_Confirmed[0] + qd_Unconfirmed[0]

        summary_3 = self.summary_report(vendor_id)

        assert summary_3[1] == summary_1[1] + batch_report_2[1]
        assert summary_3[0] == summary_1[0] + (batch_report_2[0] if batch_report_2[0] is not None else 0)
        assert summary_3[2] == summary_1[2] + batch_report_2[2]
        assert summary_3[3] == summary_1[3] + batch_report_2[3]

        Log.critical('-------當前操作、校驗通過-------')
        self.Clear_History(vendor_id, ex[0])

實在沒辦法,考慮到公司的隱私安全,我把原本的日誌刪除了,就連我自己 乍一看都看不懂;

說下基本的思路:

1.Uploading_Supplier_Orders() 上傳前 請求拿到彙總頁的各字段值 summary_1 ;上傳Excel文件;上傳後,詳情頁多了一條記錄 batch_report_1 【其狀態list 有3個: Invalid、Confirmed、Unconfirmed 】,再次請求彙總頁的接口summary_2 ,斷言 彙總頁字段值的改變;斷言此記錄字段值的改變;

2.calibration_Confirm() 對某條order執行確定操作,其狀態值改變【狀態list 的長度、元素有改變,故變爲qd_Confirmed 、qd_Unconfirmed 、qd_Invalid 】,此記錄變爲 batch_report_2 ,斷言此記錄字段值的改變;彙總頁的數據變成summary_3 ,斷言 彙總頁字段值的改變;

這2個例子 其實都是模擬實際我在測試時候的操作,順便把校驗的部分也自動完成了,即對錶記錄的新增、修改後,再自動把其他相關字段值校驗一遍;

交流技術 歡迎+QQ 153132336 zy
個人博客 https://blog.csdn.net/zyooooxie

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