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