之前所有關於準確性測試部分的分享講的都是 去查詢,好似去數據庫執行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