@pytest.fixture与@pytest.mark.parametrize结合实现参数化

背景:测试数据既要在fixture方法中使用,同时也在测试用例中使用

使用方法:在使用parametrize的时候添加"indirect=True"参数。pytest可以实现将参数传到fixture方法中,也可以在当前测试用例中使用。

原理:参数indirect=True时,pytest会把argnames当做函数去执行,将argvalues作为参数传入到argnames这个函数里。

实现demo:

通过上面的用例可以看出,当参数indirect=True时,会将name_list作为参数传入login_fixture的方法中并将通过return将结果返回,当调用login_fixture方法时可以获取到login_fixture方法的返回值,并当做test_login测试用例的参数生成多条测试用例

import pytest

name_list = ['jerry', 'Tom', 'Tony']


@pytest.fixture
def login_fixture(request):
    # 通过request.param来获取参数值
    user_fixture = request.param
    print(f'fixture中获取的值为{user_fixture}')
    return user_fixture


@pytest.mark.parametrize('login_fixture', name_list, indirect=True)
def test_login(login_fixture):
    user_test = login_fixture
    print(f'test测试用例中获取到的值为{user_test}')
    assert user_test != ''


if __name__ == '__main__':
    test_login()

上面的代码也可以这样实现:

import pytest

name_list = ['jerry', 'Tom', 'Tony']


# parametrize的格式为@pytest.mark.parametrize("参数",参数值)
@pytest.mark.parametrize("a_name_list",name_list)
def test_login(a_name_list):
    user_test = a_name_list
    print(f'test测试用例中获取到的值为{user_test}')
    assert user_test != ''


if __name__ == '__main__':
    test_login()
注:parametrize的格式可参考:
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值