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

<p>在测试工作中经常要对两个dict进行校验,而且dict可能是多层嵌套的,为此写了个递归函数。工作方便多了</p>
<p>代码如下</p>
<p>知识点:递归函数中必须有全局变量(C++中传引用的变量),所以在python中使用字典来保存每次递归结果</p>
<p>如例子中的dicresult.</p>
<p></p>
<p>#递归函数<br>
def _assertdict(expobj=None,actobj=None,dicresult=None,key=None):<br>
spacestr = " "<br>
bresult = dicresult['result']<br>
if (type(actobj) != type(expobj)):<br>
tempstr = "actobj's type not equal expobj's type and actobj's type is %s expobj's type is %s"%(type(actobj),type(expobj))<br>
bresult = bresult and False<br>
dicresult['result'] = bresult<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
if (type(actobj) == dict) and (type(expobj) == dict):<br>
for e in actobj:<br>
a_dict = actobj[e]<br>
if e in expobj:<br>
e_dict = expobj[e]<br>
_assertdict(a_dict,e_dict,dicresult,e)<br>
else:<br>
tempstr = spacestr + "not find sub dict key is",e<br>
bresult = bresult and False<br>
dicresult['result'] = bresult<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
elif(type(actobj) == list) and (type(expobj) == list):<br>
if len(actobj) != len(expobj):<br>
tempstr = spacestr + " key%s's len is not equal"%(key)<br>
bresult = bresult and False<br>
dicresult['result'] = bresult<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
return<br><br>
for i in range(len(actobj)):<br>
a_list = actobj[i]</p>
<p>
e_list = expobj[i]<br>
if a_list != a_list:<br>
tempstr = spacestr + " key:%s[%d]'s value is not equal"%(key,i)<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
_assertdict(a_list,e_list,dicresult,key+'[%d]'%i) <br>
else:<br>
if actobj == expobj:<br>
bresult = bresult and True<br>
dicresult['result'] = bresult<br>
else:<br>
if key!=None:<br>
tempstr = spacestr + "assert key: %s error and act value is %s and exp value is %s"%(key,actobj,expobj)<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
bresult = bresult and False<br>
dicresult['result'] = bresult</p>
<p></p>
<p>调用封装的函数</p>
<p>def assertdict(params,expobj=None,actobj=None,msg=None):<br>
dicresult = {}<br>
dicresult['logstr'] = ""<br>
dicresult['result'] = True<br>
_assertdict(expobj,actobj,dicresult)<br>
print dicresult<br>
if dicresult['result']:<br>
asserttrue(params,"assert dict success" + dicresult['logstr'],msg) //框架自带的断言函数,可忽略<br>
else:<br>
assertfalse(params,"assert dict failed" + dicresult['logstr'],msg) //框架自带的断言函数,可忽略</p>
<p></p>
<p></p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值