首页 > 其他 > 详细

pytest测试用例参数化 - @pytest.fixture 与 @pytest.mark.parametrize 结合使用【用例参数化传入参数设置:indirect=True】

时间:2021-07-22 11:05:33      阅读:38      评论:0      收藏:0      [点我收藏+]
@pytest.fixture 装饰器

被 @pytest.fixture 装饰器装饰的方法名可以作为一个参数传入测试方法中

作用:
① 使用此方法可以完成测试之前的数据初始化;【测试还未开始时,先执行fixture函数,完成数据初始化(获取数据/执行前置动作)】
② 此方法可以返回数据给测试函数;【fixture函数的返回值可以作为测试函数的入参,或者执行测试函数之前的一系列动作】
@pytest.mark.parametrize 装饰器
pytest 中使用此装饰器对用例进行参数化

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

如果测试数据需要在 fixture 方法中使用,同时也需要在用例中使用,可以让  parametrize  的  indirect  参数为  True 

 parametrize 源码:

def parametrize(self, argnames, argvalues, indirect=False, ids=None, scop=None):

当设置indirect = True时,pytest 会把 argnames 当做函数执行,将 argvalues 作为参数传入到 argnames 函数中


案例:【因为indirect=Ture,所以pytest测试框架将login_r当作函数执行,且将test_user_data列表作为参数传入到login_r函数中】

test_user_data = [Tom, Jerry]

# 方法名作为参数
@pytest.fixture(scope=module)
def login_r(request):
    # 通过 request.param 获取参数
    user= request.param
    print(f"/n 登录用户: {user}")
    return user

@pytest.mark.parametrize("login_r", test_user_data, indirect=True)
def test_login(login_r):
    a = login_r
    print(f"用例中 login 的返回值; {a}")
    assert a != ""

执行结果:

技术分享图片

 

pytest测试用例参数化 - @pytest.fixture 与 @pytest.mark.parametrize 结合使用【用例参数化传入参数设置:indirect=True】

原文:https://www.cnblogs.com/hls-code/p/15041846.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!