测试固件fixture(五):fixture传参
前言:
虽然fixture是作为前置操作使用,但其也可以进行传参。
很常见的一个场景就是:多条用例需要进行登录操作,而登录操作需要用不通的账号(或账号与密码),那么久可以通过对fixture前置操作进行传参,但这种情况通常
是结合着参数化去做。
一、单个参数
import pytest @pytest.fixture() def login(request): name = request.param print(name) return name name_list = ["tom", "jerry"] @pytest.mark.parametrize("login", name_list, indirect=True) def test_fixt(login): print("this is test_fixt") print("my name is {}".format(login))
执行结果:
test_3.py tom this is test_fixt my name is tom .jerry this is test_fixt my name is jerry .
我们可以看到,当fixture需要进行传参时,结合@pytest.mark.parametrize()使用时,需要将传参数据传入,indirect设置为True。
说明:indirect=True 说明将参数"login"当做函数执行,数据name_list将输入传入函数login。
二、多个参数
import pytest @pytest.fixture() def login(request): name = request.param["name"] pd = request.param["pd"] print(name, pd) return name, pd name_list_super = [{"name": "Jim", "pd": 111111}, {"name": "Tracy", "pd": 123456}] @pytest.mark.parametrize("login", name_list_super, indirect=True) def test_fixt(login): print("this is test_fixt") print("my info is {}".format(login))
执行结果:
test_3.py Jim 111111 this is test_fixt my info is ('Jim', 111111) .Tracy 123456 this is test_fixt my info is ('Tracy', 123456) .
和传单个参数一样,也是结合@pytest.mark.parametrize(),indirect设置为True。传多个参数时,需要字典格式。
重点:一般来说,如果需要传多个参数,会分成两个单个参数的fixture来进行。再结合@pytest.mark.parametrize()。
多个@pytest.mark.parametrize()也可以叠加使用,但用例执行的次数将会是叠加个数的笛卡尔乘积,如第一个有3条
数据,第二条有2条数据,则执行次数=2*3,共6次。
浙公网安备 33010602011771号