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的学习笔记,希望可以帮助到你们