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文件中的内容为:

img

yaml.safe_load()

将yaml格式文件转换为python值,一般用于读文件

def test_demo():
    with open('data.yaml',encoding='UTF-8') as f:
        yaml.safe_load(f)

运行结果如下:

img

🍕 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

运行结果

img

流式写法

datas:
 - [1,1,2]
 - [100,200,300]
 - [0.1,0.2,0.3]
 - [-1,-2,-3]
ids:['int','bigint','float','minus']
posted @ 2021-11-09 23:00  莫伊101  阅读(96)  评论(0编辑  收藏  举报