python assert dict 断言@对比@之递归断言

简介:
在测试工作中经常要对两个dict进行校验,而且dict可能是多层嵌套的,为此写了个递归函数。工作方便多了
代码如下
知识点:递归函数中必须有全局变量(C++中传引用的变量),所以在python中使用字典来保存每次递归结果
如例子中的dicresult.
#递归函数
def _assertdict(expobj=None,actobj=None,dicresult=None,key=None):
spacestr = " "
bresult = dicresult['result']
if (type(actobj) != type(expobj)):
tempstr = "actobj's type not equal expobj's type and actobj's type is %s expobj's type is %s"%(type(actobj),type(expobj))
bresult = bresult and False
dicresult['result'] = bresult
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr
if (type(actobj) == dict) and (type(expobj) == dict):
for e in actobj:
a_dict = actobj[e]
if e in expobj:
e_dict = expobj[e]
_assertdict(a_dict,e_dict,dicresult,e)
else:
tempstr = spacestr + "not find sub dict key is",e
bresult = bresult and False
dicresult['result'] = bresult
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr
elif(type(actobj) == list) and (type(expobj) == list):
if len(actobj) != len(expobj):
tempstr = spacestr + " key%s's len is not equal"%(key)
bresult = bresult and False
dicresult['result'] = bresult
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr
return

for i in range(len(actobj)):
a_list = actobj[i]
e_list = expobj[i]
if a_list != a_list:
tempstr = spacestr + " key:%s[%d]'s value is not equal"%(key,i)
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr
_assertdict(a_list,e_list,dicresult,key+'[%d]'%i) 
else:
if actobj == expobj:
bresult = bresult and True
dicresult['result'] = bresult
else:
if key!=None:
tempstr = spacestr + "assert key: %s error and act value is %s and exp value is %s"%(key,actobj,expobj)
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr
bresult = bresult and False
dicresult['result'] = bresult
调用封装的函数
def assertdict(params,expobj=None,actobj=None,msg=None):
dicresult = {}
dicresult['logstr'] = ""
dicresult['result'] = True
_assertdict(expobj,actobj,dicresult)
print dicresult
if dicresult['result']:
asserttrue(params,"assert dict success" + dicresult['logstr'],msg) //框架自带的断言函数,可忽略
else:
assertfalse(params,"assert dict failed" + dicresult['logstr'],msg) //框架自带的断言函数,可忽略

本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/751876,如需转载请自行联系原作者
相关文章
|
2月前
|
Python
请解释Python中的递归是什么?并举例说明其用法。
【2月更文挑战第25天】【2月更文挑战第85篇】请解释Python中的递归是什么?并举例说明其用法。
|
2月前
|
Python
【python】爬楼梯—递归分析(超级详细)
【python】爬楼梯—递归分析(超级详细)
|
7天前
|
分布式计算 算法 Python
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
|
7天前
|
存储 Python
Python中list, tuple, dict,set的区别和使用场景
Python中list, tuple, dict,set的区别和使用场景
|
14天前
|
存储 Python
Python中的模块对象__dict__
【6月更文挑战第13天】
15 4
|
14天前
|
存储 缓存 安全
Python教程:深入理解 Python 字典(Dict)
Python 中的字典(Dictionary)是一种非常重要的数据结构,它提供了灵活的键值对存储方式,适用于各种实际编程场景。本文将带领您探索 Python 字典的全貌,从基础概念到高级应用,让您全面了解并熟练运用 Python 字典。
15 3
|
14天前
|
存储 索引 Python
Python教程:深入了解 Python 中 Dict、List、Tuple、Set 的高级用法
Python 中的 Dict(字典)、List(列表)、Tuple(元组)和 Set(集合)是常用的数据结构,它们各自有着不同的特性和用途。在本文中,我们将深入了解这些数据结构的高级用法,并提供详细的说明和代码示例。
16 2
|
24天前
|
存储 算法 数据挖掘
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
|
24天前
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
|
24天前
|
存储 机器学习/深度学习 算法
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】
python 五种算法转置后翻转、层次旋转、递归分块、一次性旋转、环状替换 实现旋转图像【力扣题48】