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

@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】

 

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

上一篇:VSCode两个项目中的文件对比


下一篇:第五篇:DRF之认证组件