在测试工作中,可以使用yaml编写测试用例,执行测试用例时直接获取yaml中的用例数据进行测试(如:接口自动化测试)
1.什么是yaml
是一种可读的数据序列化语言,通常用于配置文件
非常简洁和强大,远比json格式更方便
可用作自动化测试框架的配置文件和测试用例文件
原则
a.大小写敏感
b.使用缩进表示层级关系
c.缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
d.使用#表示注释
e.字符串可以不用引号标注
2.yaml配置文件的格式
使用:号隔开表示键值对
使用-号表示数组
例如:
ip: 127.0.0.1
port: 2002
port_in: 8764
charset: utf-8
post_type:
- 1
- 2
- 3
- 4
读取后的结果:
{'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]}
&和*用于引用
ip: &ip 127.0.0.1
url: *ip
#运行结果
{'ip': '127.0.0.1', 'url': '127.0.0.1'}
3.使用python操作yaml配置文件
(注:PyYAML5.1之后,通过禁止默认加载程序(FullLoader)执行任意功能,该load函数也变得更加安全)
pyyaml:python的第三方库,用于操作yaml配置文件
安装pyyaml:pip install PyYaml
字符串转换成字典:yaml.load()
import yaml
def get_configres(filepath):
'''
获取yaml配置文件中的内容
:param filepath:
:return: 返回的是一个字典
'''
f1=open(filepath,"r")
res=yaml.load(f1,Loader=yaml.FullLoader)
return res
res=get_configres("../config/cfg.yaml")
print(res,type(res))
#运行结果:
{'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]} <class 'dict'>
字典转换成字符串:yaml.dump()
params={'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]}
res_str=yaml.dump(params)
print(res_str,type(res_str))
#运行结果:
charset: utf-8
ip: 127.0.0.1
port: 2002
port_in: 8764
post_type:
- 1
- 2
- 3
- 4
<class 'str'>
使用yaml写测试用例
--- #登录模块
- #test1
url: /api/login
method: post
detail: 正常登录
data:
username: admin
password: ipharmacare
check:
retcode: 0
- #test2
url: /api/login
method: post
detail: 不传账号,传密码
data:
username: test2
password: ipharmacare2
check:
retcode: 0
#运行结果:
[{'url': '/api/login', 'method': 'post', 'detail': '正常登录', 'data': {'username': 'admin', 'password': 'ipharmacare'}, 'check': {'retcode': 0}}, {'url': '/api/login', 'method': 'post', 'detail': '不传账号,传密码', 'data': {'username': 'test2', 'password': 'ipharmacare2'}, 'check': {'retcode': 0}}]
在一个文件中保存多个Yaml文档内容:用---隔开,使用yaml.load_all()方法
test.yml
--- #登录模块
- #test1
url: /api/login
method: post
detail: 正常登录
data:
username: admin
password: ipharmacare
check:
retcode: 0
--- #登录模块2
- #test1
url: /api/login
method: post
detail: 不传账号,传密码
data:
username: test2
password: ipharmacare2
check:
retcode: 0
读取使用yaml.load_all()方法
import yaml
def get_configres(filepath):
'''
获取yaml配置文件中的内容
:param filepath:
:return: 返回的是一个字典
'''
f1=open(filepath,"r",encoding='utf-8')
res=yaml.load_all(f1,Loader=yaml.FullLoader)
return res
res=get_configres("../config/test.yml")
print(res,type(res))
for i in res:
print(i)
#读取后的结果:
<generator object load_all at 0x0322C570> <class 'generator'>
[{'url': '/api/login', 'method': 'post', 'detail': '正常登录', 'data': {'username': 'admin', 'password': 'ipharmacare'}, 'check': {'retcode': 0}}]
[{'url': '/api/login', 'method': 'post', 'detail': '不传账号,传密码', 'data': {'username': 'test2', 'password': 'ipharmacare2'}, 'check': {'retcode': 0}}]