Python —— yaml文件替换变量

前言

测试过程中需要造数据,在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()
posted @ 2021-08-27 17:56  吹神  阅读(646)  评论(0编辑  收藏  举报