yaml文件:
读取yaml文件数据转换成[{},{},{}]的函数
import yaml def read_yaml(): with open(r"../new1.yaml", "r+", encoding="utf-8") as f: value = yaml.safe_load(stream=f) data=list(value.values()) return data
@pytest.mark.parametrize用法解析,简单的规则
# 直接写入数据,如果说你想把(1,2,3)当作一个整体参数来传,就这样子写
# 在每次运行时,会把[]元素的整体当作入参
@pytest.mark.parametrize("data", [(1, 2, 3), (4, 5, 9)]) #直接将参数写到()里面
def test_add_case1(data):
res=data
print(res) #打印的结果第一次是(1, 2, 3),第二次是(4, 5, 9)
assert res == (1,2,3)
# 如果说想把列表的元组进行拆解,比如说[(1,2,3)],运行时得到1,2,3需要把在设置参数时,设置多个对应的参数来接收
@pytest.mark.parametrize("a, b, c", [(1, 2, 3), (4, 5, 9)]) #直接将参数写到()里面
def test_add_case1(a, b, c):
print(a)
print(b)
print(c)
res = a + b
assert res == c
@pytest.mark.parametrize结合yaml数据进行使用,需要先把yaml的数据读取出来,然后进行把值转换成列表得到[{},{},{}],一个字典就是我们存储得一条用例
import yaml
#yaml文件的数据
#value:
# name: admin
# value: 123456
#value1:
# name: admin1
# value: 123456
def read_yaml(path):
with open(r"{}".format(path), "r+", encoding="utf-8") as f:
value = yaml.safe_load(stream=f)
data=list(value.values()) #得到[{},{},{},{},{}]
return data
# 参数为列表中嵌套字典
@pytest.mark.parametrize("data", read_yaml("../new1.yaml")) #自命名一个参数名data,将测试数据datas_dict传给data
def test_add_case4(data):
name = data["name"]
value1=data["value"]
assert name=="admin" and value1==123456
if __name__ == '__main__':
# res = read_yaml()
# print(res)
pytest.main(["-vs","r_test02.py::test_add_case4"])
@pytest.mark.parametrize结合夹子使用,比如说在执行一条测试用例前,要用例中调用别的函数
indire=True标识login是个函数,只是在这被用作了参数
注意格式:
@pytest.mark.parametrize("函数名", 数据变量, indirect=True)
def test_01(函数名):
pass
import pytest
#定义测试数据
user_data= ["admin1", "admin2"]
password_data=["admin123456","admin223456"]
#定义测试夹子
@pytest.fixture(scope="module")
def user(request): # 这是输入账户名的
user = request.param
print(user)
return user
#测试用例
#indire=True标识login是个函数,只是在这被用作了参数,运行的时候会在文件中找这个login函数
@pytest.mark.parametrize("user", user_data, indirect=True)
def test_01(user):
response=user
print(response)
#运行结果:
r1_test02.py::test_01[admin1] admin1
admin1
PASSED
r1_test02.py::test_01[admin2] admin2
admin2
PASSED
============================== 2 passed in 0.02s ==============================
Process finished with exit code 0
如果一个用例同时引用两个参数化数据,那么会进
行交叉组合执行
import pytest
#定义测试数据
user_data= ["admin1", "admin2"]
password_data=["admin123456","admin223456"]
#定义测试夹子
@pytest.fixture(scope="module")
def user(request): # 这是输入账户名的
user = request.param
print(user)
return user
#定义测试夹子
@pytest.fixture(scope="module")
def password(request): # 这是输入账户名的
passwd = request.param
print(passwd)
return passwd
#测试用例
#indire=True标识login是个函数,只是在这被用作了参数,运行的时候会在文件中找这个login函数
@pytest.mark.parametrize("user", user_data, indirect=True)
@pytest.mark.parametrize("password", password_data, indirect=True)
def test_01(user,password):
response=user
response1=password
print("用户:{},密码:{}".format(response,response1))
#运行结果
r1_test02.py::test_01[admin123456-admin1] admin1
admin123456
用户:admin1,密码:admin123456
PASSED
r1_test02.py::test_01[admin123456-admin2] admin2
用户:admin2,密码:admin123456
PASSED
r1_test02.py::test_01[admin223456-admin2] admin223456
用户:admin2,密码:admin223456
PASSED
r1_test02.py::test_01[admin223456-admin1] admin1
用户:admin1,密码:admin223456
PASSED
============================== 4 passed in 0.02s ==============================
Process finished with exit code 0