之前做了一期关于 校验Web前后相关页面数据的分享 ,这次来做一期 关于接口返回值和数据库的记录的校验。
情景是 我们产品要我校验web前端页面的数据,保证所呈现出来的数据结果的准确性,实际我没整过,也不知道这部分要咋测。几万条数据的明细,我真不可能一条一条数据去对。我的思路是 校验接口返回值和数据库表的记录;
【实际思路和产品要求的 还是有些问题的,因为前端页面解析时会对多个空格、回车做压缩,所以接口返回值会被“修改”,和前端真正显示的还有极个别的差别;再不用前端特殊处理的前提下,如果把页面数据导出CSV文件后,将其和数据库的记录做个校验,这样可能更加符合我们产品的要求-后面会分享】
个人博客:https://blog.csdn.net/zyooooxie
具体情景
前端页面:
接口返回值:
接口返回的值我就不上图了;
数据库表里的字段:【部分字段马赛克处理,谅解】
对比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