@pytest.mark.parametrize用法(yaml和fixture结合使用)

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

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值