七、YAML文件函数动态读取extract文件中的数据(热加载debugtalk.py)
1、函数设计
get_extract_data 方法:
- 从 extract.yaml 文件中获取动态数据。
- 支持三种数据类型:
i.嵌套数据:如 Cookie 下的 access_token_cookie。
ii.单个键值数据:如 token。
iii.列表数据:如 goodsId。 - 根据 out_format 参数决定返回数据的格式:
i.0:随机选择一个值。
ii.-1:返回所有值,以逗号分隔的字符串。
iii.-2:返回所有值,以列表形式。
iv.其他值:按顺序返回指定索引的值。
seq_read 方法:
- 用于处理 out_format 参数不为 0、-1、-2 的情况。
- 返回指定索引的值。
- get_now_time 方法:
- 获取当前日期,不带时分秒。
get_headers 方法:
- 根据参数 params_type 返回相应的请求头格式:
-data:表单格式。json:JSON 格式。
2、代码
点击查看代码
# 测试用例文件动态解析(热加载)
# 热加载:动态获取接口的返回值或者函数值,作为其它接口的入参数
"""
获取extract全局变量文件中的动态数据
例如extract.yaml文件格式
# 1、键值队嵌套的数据
Cookie:
access_token_cookie: eyJhbGciOiJIUZI1NiISInR5CCI6IkpXVcJ9.eyImcmVzaCI6ZmFsc2USImLhdCI6MTCWNTE5ODAWNSWianRDIiOIZTYINZN
2、单个键值数据
token: B9AD781F4DAD1DAEfabEfC3EeB1EF
userId:'2823362215735222084
3、列表中的数据
goodsId:
- 183827888191
- 172817212121
- 12981982122
- 23123123123
"""
import re
import random
from unit_tools.handle_data.yaml_handler import get_extract_yaml
from datetime import date
class DebugTalk:
def get_extract_data(self, node_name, out_format=None):
"""
获取extract.yaml数据,1、嵌套取值 2、单个取值 3、列表取值
首先判断out_format是否为数字类型,如果是就是列表取值,如果不是就是获取下一个节点的value
:param node_name: extract.yaml文件中的key
:param out_format: str类型,0:随机取读取;-1:读取全部数据,返回字符串格式;-2:读取全部数据,返回是列表格式;其它值就是顺序读取
:return:
"""
data = get_extract_yaml(node_name)
if out_format is not None and bool(re.compile(r'^[+-]?\d+$').match(str(out_format))):
out_format = int(out_format)
data_value = {
out_format: self.seq_read(data, out_format),
0: random.choice(data),
-1: ','.join(data),
-2: ','.join(data).split(',')
}
data = data_value[out_format]
else:
data = get_extract_yaml(node_name, out_format)
return data
def seq_read(self, data, randoms):
"""获取extract.yaml,第二个参数不为0,-1,-2的情况下"""
if randoms not in [0. - 1. - 2]:
return data[randoms - 1]
else:
return None
# 获取系统当前日期,不带时分秒
def get_now_time(self):
return date.today()
# 获取请求头header
def get_headers(self, params_type):
"""
根据参数params_type,返或header格式:表单还是json
:param params_type:
:return:
"""
headers_mapping = {
'data': {'Content-Type': 'application/x-www-formurlencoded;charset=UTF-8'},
'json': {'Content-Type': 'application/json;charset=UTF-8'}
}
header = headers_mapping.get(params_type)
if header is None:
print('不支持的请求格式,只支持表单和json格式')
return header
if __name__ == '__main__':
debug = DebugTalk()
# 获取嵌套数据
res = debug.get_extract_data('Cookie', 'access_token_cookie')
# 获取列表数据
# res = debug.get_extract_data('goodsId','0')
# 获取单个键值
# res = debug.get_extract_data('token')
print(res)
浙公网安备 33010602011771号