测试固件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次。

 

posted @ 2022-02-24 17:02  Target_L  阅读(165)  评论(0)    收藏  举报