之前做了一期關於校驗Web前後相關頁面數據的分享,這次來做一期 關於接口返回值和數據庫的記錄的校驗。
情景是 我們產品要我校驗web前端頁面的數據,保證所呈現出來的數據結果的準確性,實際我沒整過,也不知道這部分要咋測。幾萬條數據的明細,我真不可能一條一條數據去對。我的思路是 校驗接口返回值和數據庫表的記錄;
【實際思路和產品要求的 還是有些問題的,因爲前端頁面解析時會對多個空格、回車做壓縮,所以接口返回值會被“修改”,和前端真正顯示的還有極個別的差別;再不用前端特殊處理的前提下,如果把頁面數據導出CSV文件後,將其和數據庫的記錄做個校驗,這樣可能更加符合我們產品的要求-後面會分享】
具體情景
前端頁面:
接口返回值:
接口返回的值我就不上圖了;
數據庫表裏的字段:【部分字段馬賽克處理,諒解】
對比2個列表的元素
拿到接口返回值和數據庫表裏的數據後,需要把每一條明細對比,到底能不能對得上;我的思路是將這2個列表的元素做對比;
封裝的方法:傳入2個list,對list1做遍歷,判斷此元素是否在list2,如果在,就刪掉list2的;如果不在,就報錯;等待整個遍歷結束,斷言list2是否爲空;
def t_f3(self, list_a, list_b):
"""for 循環"""
if len(list_a) == len(list_b):
print(len(list_b), len(list_a), '2個list的長度')
for i in range(len(list_a)):
if list_a[i] in list_b:
print(list_a[i])
list_b.remove(list_a[i])
else:
print('error')
raise AssertionError
assert len(list_b) == 0
print('校驗通過')
else:
print('長度不相同', len(list_b), len(list_a))
raise AssertionError
def t_f2(self, list_a, list_b):
"""while 循環"""
if len(list_a) == len(list_b):
print(len(list_b), len(list_a), '2個list的長度')
for a in list_a:
while a in list_b:
list_b.remove(a)
break
assert len(list_b) == 0
print('校驗通過')
else:
print('長度不相同', len(list_b), len(list_a))
raise AssertionError
def t_f1(self, list_a, list_b):
"""循環嵌套"""
if len(list_a) == len(list_b):
print(len(list_b), len(list_a), '2個list的長度')
for a in list_a:
for b in list_b:
if a == b:
print(a)
list_b.remove(b)
break
assert len(list_b) == 0
print('校驗通過')
else:
print('長度不相同', len(list_b), len(list_a))
raise AssertionError
這一部分分享的 三個方法是一個思路。但這一部分 我花了一週的時間,還是依靠同事的幫助;(因爲我的思路,始終沒能解決重複元素的問題)
我最初的思路是循環嵌套兩個list,若list1的a == list2的b,將其加入另一個list3,最後判斷list3的長度和list1、list2是否相等;
後面改爲先求list1、list2的交集、再求並集、最後把交集、並集求差集,斷言差集的長度爲0;
若list1 = [1, 2, 2, 2, 2, 2, 2, 2, 2, 2],list2 = [2, 1, 1, 1, 1, 1, 1, 1, 1, 1],即list1、list2長度相同 且 裏面有不同的重複元素,我的2個思路實際是沒法測出來的;
腳本執行結果
交流技術 歡迎+QQ 153132336 zy
個人博客 https://blog.csdn.net/zyooooxie