yaml : Yet Another Markup Language :另一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大,更直观,更方便,有点类似于json格式。在自动化测试用的相当多,所以需要小伙伴们要熟练掌握,把测试数据存放在yaml文件,也可以进行参数化。
yaml基本语法规则:
pip install pyyaml -i https://pypi.douban.com/simple
在同一目录下新建 test_data.yaml
和 read_yaml.py
文件。
yaml文件:
test_data.yaml
- phone : 1326557 key : 01829bab25a57e4c11eff56db56d1f94 except : 200
py文件:
read_yaml.py
# -*- coding:utf-8 -*- import yaml f = open('test_data.yaml', 'r', encoding='utf-8') cfg = f.read() d = yaml.load(cfg, Loader=yaml.FullLoader) # 用load转字典 # yaml5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数 # Loader=yaml.FullLoader 加上这行代码,告警就没了 print(d)
去掉告警的方法看以上备注:
运行结果:
[{'phone': 1326557, 'key': '01829bab25a57e4c11eff56db56d1f94', 'except': 200}]
以上是yaml文件的读取的简单用法,将她进行封装好,后续使用直接调用即可。
import yaml import os class GetYaml(): def __init__(self, file_path): # 判断文件是否存在 if os.path.exists(file_path): self.file_path = file_path else: print('没有找到%s文件路径' % file_path) self.data = self.read_yaml() def read_yaml(self): with open(self.file_path, 'r', encoding='utf-8')as f: p = f.read() return p def get_data(self, key=None): result = yaml.load(self.data, Loader=yaml.FullLoader) # 判断key是否存在 if key == None: return result else: return result.get(key) if __name__ == '__main__': read_yaml = GetYaml('test_data.yaml') r = read_yaml.get_data() print(r)
做接口自动化或者UI自动化的时候,要进行数据分离,把测试数据写在yaml文件中,即在yaml文件中写测试用例。
把常用的格式列出来:
yaml文件的格式:
user: admin psw: 123456
python3.7中的格式:
{'user': 'admin', 'psw': 123456}
yaml文件的格式:
input: user: admin psw: 123456
python3.7中的格式:
{'input': {'user': 'admin', 'psw': 123456}}
yaml里面写一个数组,前面加一个'-'符号.
yaml文件的格式:
- test1: 123456 - test2: 111111 - test3: 222222
python3.7中的格式:
[{'test1': 123456}, {'test2': 111111}, {'test3': 222222}]
yaml文件格式:
- user: admin1 pwd: '123456' - user: admin2 pwd: '123321' - user: admin3 pwd: '123457'
python3.7中的格式
[{'user': 'admin1', 'pwd': '123456'}, {'user': 'admin2', 'pwd': '123321'}, {'user': 'admin3', 'pwd': '123457'}]
yaml文件中的格式:
input1: - admin1 - '123456' input2: - admin2 - '123321' input3: - admin3 - '123457'
python3.7中的格式:
{'input1': ['admin1', '123456'], 'input2': ['admin2', '123321'], 'input3': ['admin3', '123457']}