前言
测试过程中需要造数据,在yaml文件使用变量名占位,在加载数据时填充进去。
displace.py 定义处理变量的方法,使用递归遍历。
# 同级目录下的文件使用from . 导入
from . import create_data
def analyze_data(data):
"""
递归解析json数据
:param data: 数据源
:return:
"""
# 判断是否是字典
if isinstance(data, dict):
# 遍历key,value
for k, v in data.items():
# value是字典、列表或者元组,递归。
if isinstance(v, (dict, list, tuple)):
analyze_data(v)
else:
# value是字符串,检查是否是特殊变量,是则替换
if str_dispose(v):
data[k] = variable_substitution(v)
if isinstance(data, (list, tuple)):
for i in range(len(data)):
data[i] = analyze_data(data[i])
return data
else:
if str_dispose(data):
data = variable_substitution(data)
return data
def variable_substitution(s):
"""变量替换从指定的文件中找方法"""
name = str(s).replace("${", "").replace("}", "")
if hasattr(create_data, name):
# 通过反射招到create_data文件中找方法
func = getattr(create_data, name)
return func()
else:
return "not found!"
def str_dispose(_str):
"""判断字符串是否包含${}字符"""
return True if str(_str).startswith("${") and str(_str).endswith("}") else False
create_data.py 定义方法返回变量需要替换的值
import random
from faker import Faker
"""
在这里写生成测试数据的方法,yaml文件中用“${变量名}调用”
"""
f = Faker(locale=‘zh_CN‘)
# 随机生成一个姓名
def name(): return f.name()
# 随机生成电话号码
def phone(): return f.phone_number()
# 随机公司名称
def company(): return f.company()
# 随机生成一篇文章
def text(): return f.text()
# 随机身份证号
def ssn(): return f.ssn()
# 随机段落
def paragraph(): return f.paragraph()
# 随机一句话
def sentence(): return f.sentence()