python动态断言

根据业务场景,本人写了一个通用的动态断言方法,支持value,{key:value},{key:正则表达式},方法如下

# coding=utf-8
import re
from app_execution.allFunction import allFunction


class TestResult(object):
    def testcase(self, result, assertdata):  # 根据respcode和message正则断言
        testresult ='0'
        if (result == None or assertdata == None):  # 如果断言规则是空的
            testresult = '1'
        if isinstance(assertdata, str):  # 如果断言规则是字符串
            assert_respcode_result = re.search(assertdata, result['respCode'], re.I | re.M)
            assert_message_result = re.search(assertdata, result['message'], re.I | re.M)
            if assert_respcode_result or assert_message_result:
                testresult = '1'
            else:
                testresult = TestResult().assert_key(assertdata, result)
        return testresult

    def assert_key(self, assert_data, result):#递归断言
        testresult = '0'
        if not isinstance(assert_data, dict):  # 如果断言规则是dict
            assert_data = allFunction().parse_js(assert_data)
        if isinstance(assert_data, dict):
            for key in assert_data:
                assertlist = []
                assert_list = allFunction().get_target_value(key, result, assertlist)#获取key的value
                if assert_list != []:
                    if not isinstance(assert_data[key], dict) and not isinstance(assert_data[key], list):
                        regex=assert_data[key]
                        subject= assert_list[0]
                        pattern=re.compile(regex)
                        if pattern.search(subject):#正则表达式断言
                            testresult = '1'
                            continue
                    elif isinstance(assert_data[key], dict) or isinstance(assert_data[key], list):
                        TestResult().assert_key(assert_data[key], result)
                    else:
                        break
                else:
                    break
        return testresult
可以看出assert_key()是使用了递归,这里面还调用了其他方法,一下一一解释
1.allFunction().get_target_value(),是用来无限遍历非标准json

2.allFunction().parse_js(),解析非标准JSON的Javascript字符串,等同于json.loads(JSON str)


猜你喜欢

转载自blog.csdn.net/qq_31551211/article/details/80051604
今日推荐