> 文档中心 > python测试框架-->pytest结合数据驱动-yaml(五)

python测试框架-->pytest结合数据驱动-yaml(五)


1、数据驱动的含义

数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件(例如yaml,json、excel、csv等)来对数据进行存储,然后在测试用例中读取这些数据。

2、数据驱动应用场景

应用场景:APP、Web、接口自动化测试

  • 测试步骤的数据驱动
  • 测试数据的数据驱动
  • 配置的数据驱

3、pytest结合YAML

  • yaml是一个可读性高,用来表达数据序列化的格式。pyyaml模块在python中用于处理yaml格式数据,主要使用yaml.safe_load()和yaml.sofa_dump()函数将python值和yaml格式数据相互转换。yaml.safe_load()是从yaml中读取数据,yaml.sofa_dump()是将数据写入到yaml文件中。

4、安装PyYAML

  • 安装pip install PyYAML

5、实战

  • 案例:创建用例文件以及数据文件来完成数据驱动的测试案例,创建一个文件夹testdata,在这个文件夹下创建data.yaml和test_yaml.py文件,如下图所示:

在这里插入图片描述

(1)yaml的数据类型是列表

案例一:

#创建data.yml-  - 1  - 2-  - 20  - 30
#创建test_yaml.py  import pytestimport yaml@pytest.mark.parametrize("a,b",yaml.safe_load(open("data.yaml",encoding='utf-8')))def test_foo(a,b):    print(f"a+b = {a+b}")    

运行结果:

在这里插入图片描述

案例二:

#data.yml-  dev: 127.0.0.1
# perject:testdata# name:test_demo.py.py# date:2022-4-18import yamlimport pytestclass TestDemo:    def test_get_data(self): data = yaml.safe_load(open("data.yaml", encoding='utf-8')) print(type(data))    @pytest.mark.parametrize("env",yaml.safe_load(open("./data.yaml")))    def test_demo(self,env): if "test" in env:     print("这是测试环境")     print("测试环境ip是:",env["test"]) elif "dev" in env:     print("这是开发环境")     print("开发环境的ip是:",env["dev"])

执行结果:

在这里插入图片描述

案例三:

#data.yaml文件-  - 10  - 20-  - 30  - 6
# perject:testdata# name:test_demo.py.py# date:2022-4-18import pytestimport yamlclass TestData:    # @pytest.mark.parametrize("a,b",[(10,20),(10,30)]) #元祖    # @pytest.mark.parametrize(("a","b"), [(10, 20), (10, 30)]) # #列表    # @pytest.mark.parametrize(["a", "b"], [(10, 20), (10, 30)]) @pytest.mark.parametrize(["a", "b"], yaml.safe_load(open("./data.yaml")))    def test_data(self,a,b): print(f"a+b={a+b}")

在这里插入图片描述

案例四:

#data.yaml-  - 10  - 10  - 20-  - 30  - 6  - 36
# perject:testdata# name:test_demo.py.py# date:2022-4-18import pytestimport yamldef my_add(x, y):    result = x + y    return resultdef test_get_json():    with open("data.yaml", 'r',encoding="UTF-8") as  file: data = yaml.safe_load(file.read()) data1 = [] for i in data:     data1.append(i) # print(data1) return data1class TestWithJson:    @pytest.mark.parametrize("x,y,expected",test_get_json())    def test_add(self,x,y,expected): value = my_add(x,y) assert value == int(expected)

在这里插入图片描述

(2)yaml的数据类型是字典

#data.yamlinfo:  "name": "chengzi"  "age": 18
# perject:testdata# name:test_yaml.py.py# date:2022-4-18import pytestimport yamldef get_data():    data = yaml.safe_load(open("data.yaml", encoding='utf-8'))    name = data["info"]["name"]    age = data["info"]["age"]    return name,age'''这个用例是为了打印数据,可以忽略'''def test_get_data():    data = yaml.safe_load(open("data.yaml", encoding='utf-8'))    name = data["info"]["name"]    age = data["info"]["age"]    print(name)    print(age)    print(data)    print(type(data))@pytest.mark.parametrize("name,age", [get_data()])def test_info(name,age):    print(f"姓名是{name},年龄是{age}")

以上是pytest 结合数据驱动-yaml的学习笔记,希望可以帮助到你们