Pytest系列(5)- yaml数据驱动
数据驱动的概念
从数据的改变驱动自动化测试的执行,从而引起测试结果的改变
yaml介绍
yaml基本使用
安装:pip install pyyaml
导入:import yaml
基本语法:
-
大小写敏感
-
使用缩进表示层级关机,缩进只允许使用空格
-
使用的空格数多少不重要,只要层级相同的元素坐对齐即可
-
#
表示注释
常用数据类型
字典形式表示方法:key:value
# 单行写法
key: {name: zuiyoujie, age: 20}
# 多行写法
key:
name: mooii
age: 18
数组形式表示方法:以-
开头
# 单行写法
china: ['beijing', 'shanghai', 'hubei']
# 多行写法
china:
- beijing
- shanghai
- hubei
稍微复杂一点的嵌套:
# 单行写法:
china: [ { beijing: 222, shanghai: 333, hebei: 444 },{ shanxi: 222, shandong: 333 } ]
# 多行写法:
china:
- beijing: 222 # 可以在连字符后直接写参数
shanghai: 333
hebei: 444
- # 也可以连字符分隔,换行写参数
shanxi: 222
shandong: 333
更多使用方法可参考官网
操作yaml文件
yaml.safe_dump()
将python值转换为yaml格式文件,一般用于写文件(保存为.yaml文件)
dict_data = {'a': 1, 'b': 2}
with open('data.yaml', 'w', encoding='UTF-8') as f:
yaml.safe_dump(dict_data, f)
此时data.yaml
文件中的内容为:
yaml.safe_load()
将yaml格式文件转换为python值,一般用于读文件
def test_demo():
with open('data.yaml',encoding='UTF-8') as f:
yaml.safe_load(f)
运行结果如下:
?? ATTENTION:
safe_load()
将文件流转成python对象safe_load()
读取的结果会保存为python的dict类型
yaml结合parametrize
一个简单的例子??????
@pytest.mark.parametrize(("a","b"), yaml.safe_load(open("test.yaml")))
def test1(self,a,b):
# print(yaml.safe_load(open('test.yaml')))
print(a+b)
yaml文件中的内容如下:
-
- 10
- 20
-
- 30
- 40
运行结果
流式写法
datas:
- [1,1,2]
- [100,200,300]
- [0.1,0.2,0.3]
- [-1,-2,-3]
ids:['int','bigint','float','minus']