Bootstrap

python+pytest框架读取yaml的用户名,密码,接口地址等数据

1.新建config文件夹,在文件夹下新建要读取的yamlw文件,例如environment.yaml

yaml的用户信息数据如下:

user:
  york:
    phone: 账号166xxxxxxxx
    passwd: 密码xxxxxxxxxxxxxxxx
    remember:
  laoyan:
    phone: 188xxxxxxxx
    passwd: xxxxxxxxxxxxxxxx
    remember:
  canteen:
    phone: 19999999999
    passwd: 123
    remember:

test_url: https://www.baidu.com
url1: http://192.168.88.201:8028

2.新建py文件读取 yaml项目文件的路径,例如:tool.py

# 导入os包
import os

def get_project_path():
    """
    获取项目目录
    :return:
    """
    # api_auto_test为项目名称,可以自行调整
    project_name = "api_auto_test"
    # 获取当前项目路径
    file_path = os.path.dirname(__file__)
    # 因为file_path返回的是当前文件所在位置的目录,而我们需要项目的跟目录
    # 所以这里使用切片,把返回的路径切片到刚好为根目录的地方(方法不唯一)
    a = file_path[:file_path.find(project_name) + len(project_name)]
    print("文件项目所在地址为",a)
    return a


def sep(path, add_sep_before=False, add_sep_after=False):
    """
    拼接文件路径,添加系统分隔符
    :param path: 路径列表,类型为数组  ["config","environment.yaml"]
    :param add_sep_before: 是否需要在拼接的路径前加一个分隔符
    :param add_sep_after: 是否需要再拼接的路径后加一个分隔符
    :return:
    """
    # 拼接传入的数组
    all_path = os.sep.join(path)
    # 如果before为TRUE,那就在路径前面加“/”
    if add_sep_before:
        all_path = os.sep + all_path
        print("add_sep_before为true时的地址:",all_path)
    # 如果after为TRUE,那就在路径后面加“/”
    if add_sep_after:
        all_path = all_path + os.sep
        print("add_sep_after为true时的地址:",all_path)

    return all_path

if __name__ == '__main__':
    # 测试一下
    print(get_project_path())
    print(sep(["config","environment.yaml"], add_sep_before=True))

3. 新建读取yaml的py文件。例如:yaml_config.py,运行该py文件就能读取到yaml的数据

# 导出处理yaml文件的包
import yaml
# 导入3.1编写好的tools里的方法
# from common.tools import get_project_path, sep
from api_auto_test.common.tools import get_project_path,sep

class GetConfig:
    # 使用构造函数,初始化yaml文件,把yaml文件读取出来
    def __init__(self):
        # 用tools里的get_project_path()获取项目路径
        project_path = get_project_path()
        # 使用with——open方法读取yaml文件内容
        # open里的project_path + sep(["config", "environment.yaml")用于把yaml文件路径拼出来
        with open(project_path + sep(["config", "environment.yaml"], add_sep_before=True), "r",
                  encoding="utf-8") as env_file:
            # 使用yaml.load方法把读取出的文件转化为列表或字典,方便后续取值
            # Loader=yaml.FullLoader意思为加载完整的YAML语言,避免任意代码执行
            self.env = yaml.load(env_file, Loader=yaml.FullLoader)

    def get_username_password(self, user):
        """
        读取配置文件里的账号密码
        :param user: 需要取哪一个账号的就输入对应的名称,比如我想去york的账密,user就传“york”
        :return:
        """
        # 直接return出来对应的账号密码
        return self.env["user"][f"{user}"]["phone"], self.env["user"][f"{user}"]["passwd"], self.env["user"][f"{user}"]["remember"]

    def get_url(self):
        """
        测试地址
        :return:
        """
        # 直接return出来对应的测试域名
        return self.env["url1"]


# 测试一下
if __name__ == "__main__":
    getConfig = GetConfig()
    print(getConfig.get_username_password("york"))
    print(getConfig.get_url())
    print(getConfig.get_mysql_config())

;