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,如需转载请自行联系原作者
相关文章
|
8天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
25 2
|
1月前
|
Java 程序员 C++
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
23 0
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
|
2月前
|
Python
python 如何将QueryDict转化为dict | 18
python 如何将QueryDict转化为dict | 18
|
1月前
|
Python
Python‘s Assert Syntax
Python‘s Assert Syntax
|
3月前
|
算法 Python
python函数递归和生成器
python函数递归和生成器
|
3月前
|
算法 数据挖掘 Python
|
3月前
|
测试技术 Python 容器
Python接口自动化测试框架(基础篇)-- 常用数据类型dict
这篇文章详细介绍了Python中字典(dict)数据类型的使用,包括字典的创建、取值、增删改操作以及内置函数的应用,并探讨了字典的扩展特性,如键的唯一性和不可变性。
21 0
Python接口自动化测试框架(基础篇)-- 常用数据类型dict
|
3月前
|
数据采集 Java Python
python 递归锁、信号量、事件、线程队列、进程池和线程池、回调函数、定时器
python 递归锁、信号量、事件、线程队列、进程池和线程池、回调函数、定时器
|
4月前
|
缓存 Python
Python中递归错误
【7月更文挑战第17天】
48 8
|
4月前
|
算法 Python
python中算法递归错误(Recursion Errors)
【7月更文挑战第18天】
69 1