栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python解析yaml文件动态化参数设计

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python解析yaml文件动态化参数设计

文章目录
  • 一、python动态解析.yaml文件参数:
    • 1.1、创建.yaml文件参数:
    • 1.2、yaml文件读取:
    • 1.3、校验yaml文件用例参数格式:
    • 1.4、动态参数化用例做替换:
    • 1.5、查看效果:

一、python动态解析.yaml文件参数: 1.1、创建.yaml文件参数:

创建test_case.yaml文件

- name: ${name}
  request:
    url: 'http://www.baidu.com/'
    headers:
      content-type: ${value}
    params:
      username: ${user}
      password: ${pwd}
  assert:
    expect: none
    real: none
1.2、yaml文件读取:

python解析.yaml用例

def read_testcase_yaml(path: str):
    with open(DATAS_YAML_PATH + path, mode='r', encoding='utf-8') as f:
        return yaml.load(f, Loader=yaml.FullLoader)
1.3、校验yaml文件用例参数格式:

校验test_case.yaml文件用例编写格式,是否符合预期,用第一层及第二层参数断言验证

def check_info_yaml(case_info):
    # 获取列表所有的key
    case_info = case_info[0]
    case_info_keys = case_info.keys()
    # 首先判断caseInfo中是否包含必填的字段
    if 'name' in case_info_keys and 'request' in case_info_keys and 'assert' in case_info_keys:
        # 获取request中所有的key
        request_keys = case_info['request'].keys()
        # 判断request中是否包含url、headers、params
        if 'url' in request_keys and 'headers' in request_keys and 'params' in request_keys:
            print("yaml用例标准化格式:校验通过")
            # 获取url
            url = case_info['request']['url']
            # print(f"获取yaml文件当中的url为:{url}")
            # 获取headers
            headers = case_info['request']['headers']
            # print(f"获取yaml文件当中的headers为:{headers}")
        else:
            print("二级关键词必须包含:url,headers,params")
    else:
        print("一级关键词必须包含:name,request,assert")
1.4、动态参数化用例做替换:

这里是主要用框架内部环境变量去做映射,达到替换环境变量的目的
不懂如何设置环境变量的可以参照:https://editor.csdn.net/md/?articleId=124766449

def replace_value(data, *args, **kwargs):
    # 判断data是否存在
    print(f"参数data为:{data}")
    if data is not None:
        # 判断data类型是列表及字典类型则用json方法转为字符串类型
        # print("进入到判断中")
        if isinstance(data, list) or isinstance(data, dict):
            # print("进入到字典或列表")
            str_data = json.dumps(data)
        # 判断data非字典及列表则强转为字符串即可
        else:
            # print("进入到其它类型")
            str_data = str(data)
        length = len(str_data)
        # print(f"当前参数:{str_data}")
        # 对字符串str_data进行循环,判断是否存在${},存在则替换所有参数
        for rv in range(1, str_data.count("$") + 1):  # 这里判断替换次数
            print(f"{str_data.count('$')}")
            start_index = str_data.index('${')
            end_index = str_data.index('}', start_index, length)
            print(start_index, end_index)
            print(f"当前需要替换值:{str_data[start_index:end_index + 1:]}")
            replace_data = read_environment(f'{str_data[start_index + 2:end_index:]}')
            if replace_data is not None:
                str_data = str_data.replace(str_data[start_index:end_index + 1:], replace_data)
            else:
                print(
                    f"您要读取替换的key值:{str_data[start_index + 2:end_index:]},不存在请前往/test_datas/data_type/yaml/environment.yaml文件中确认")
        return eval(str_data)

    else:
        print(f"您输入参数有误要替换的参数项为:{data}")

1.5、查看效果:

4个.yaml文件当中的参数均呗替换成功

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号