数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件(例如yaml,json、excel、csv等)来对数据进行存储,然后在测试用例中读取这些数据。
应用场景:APP、Web、接口自动化测试
(1)yaml的数据类型是列表
案例一:
#创建data.yml
-
- 1
- 2
-
- 20
- 30
#创建test_yaml.py
import pytest
import 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-18
import yaml
import pytest
class 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-18
import pytest
import yaml
class 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-18
import pytest
import yaml
def my_add(x, y):
result = x + y
return result
def 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 data1
class 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.yaml
info:
"name": "chengzi"
"age": 18
# perject:testdata
# name:test_yaml.py.py
# date:2022-4-18
import pytest
import yaml
def 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的学习笔记,希望可以帮助到你们