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())