比如一个登陆的fixture,有时候不同用例需要用不同的用户名和密码登陆,就需要将不同的用户名和密码传递给fixture,就用到fixture的参数传递了
固定用法用request作为参数,用request.param获取参数值
这里特别说明一下request:诸如这种的request作为参数的,这时候的request是pytest的一个内置fixture函数,当他作为参数时,具有request.param属性,用来获取请求的参数
第一种方法是,利用pytest的parametrize传递参数时
传单个参数
案例一:
切记:这里的data都是列表,列表里可以是字典
案例二:传递多个参数
案例三:传多个参数
@pytest.fixture(scope=“module”)
def input_user(request):
user = request.param
print(“登录账户:%s” % user)
return user
@pytest.fixture(scope=“module”)
def input_psw(request):
psw = request.param
print(“登录密码:%s” % psw)
return psw
data = [
(“name1”, “pwd1”),
(“name2”, “pwd2”)
]
@pytest.mark.parametrize(“input_user,input_psw”, data, indirect=True)
def test_more_fixture(input_user, input_psw):
print(“fixture返回的内容:”, input_user, input_psw)
执行结果:
10fixture_request.py::test_more_fixture[name1-pwd1] 登录账户:name1
登录密码:pwd1
PASSED [ 50%]fixture返回的内容: name1 pwd1
10fixture_request.py::test_more_fixture[name2-pwd2] 登录账户:name2
登录密码:pwd2
PASSED [100%]fixture返回的内容: name2 pwd2
案例四:多个fixture(叠加装饰器)
@pytest.fixture(scope=“function”)
def input_user(request):
user = request.param
print(“登录账户:%s” % user)
return user
@pytest.fixture(scope=“function”)
def input_psw(request):
psw = request.param
print(“登录密码:%s” % psw)
return psw
name = [“name1”, “name2”]
pwd = [“pwd1”, “pwd2”]
@pytest.mark.parametrize(“input_user”, name, indirect=True)
@pytest.mark.parametrize(“input_psw”, pwd, indirect=True)
def test_more_fixture(input_user, input_psw):
print(“fixture返回的内容:”, input_user, input_psw)
执行结果
10fixture_request.py::test_more_fixture[pwd1-name1] 登录账户:name1
登录密码:pwd1
PASSED [ 25%]fixture返回的内容: name1 pwd1
10fixture_request.py::test_more_fixture[pwd1-name2] 登录账户:name2
登录密码:pwd1
PASSED [ 50%]fixture返回的内容: name2 pwd1
10fixture_request.py::test_more_fixture[pwd2-name1] 登录账户:name1
登录密码:pwd2
PASSED [ 75%]fixture返回的内容: name1 pwd2
10fixture_request.py::test_more_fixture[pwd2-name2] 登录账户:name2
登录密码:pwd2
PASSED [100%]fixture返回的内容: name2 pwd2
第二种方法:直接把参数传递个fixture函数