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

本文介绍了一个递归函数,用于在测试工作中高效地比较两组嵌套字典,包括处理不同数据类型、不同层级结构以及列表等场景。通过全局变量保存递归结果,确保了比较过程的准确性与效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在测试工作中经常要对两个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)    //框架自带的断言函数,可忽略

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值