- 一、python动态解析.yaml文件参数:
- 1.1、创建.yaml文件参数:
- 1.2、yaml文件读取:
- 1.3、校验yaml文件用例参数格式:
- 1.4、动态参数化用例做替换:
- 1.5、查看效果:
创建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文件当中的参数均呗替换成功



