Pytest fixture参数传递的4种方式

Pytest fixture参数传递的4种方式

  • 一、fixture中的函数返回
  • 二、与@pytest.mark.parametrize的结合
  • 三、fixture中的方法嵌套传递
  • 四、测试方法中产生数据后,直接调用teardown

最近使用Pytest中的fixture和conftest时,遇到需要在conftest中的setup和teardown方法里传递参数。这里记录以下4种实现的方式。

一、fixture中的函数返回

conftest.py

@pytest.fixture(scope="class")

def setup_func():

    test_data = [{"k1": "v1"}, {"k2": "v2"}]

    return test_data

testcase.py

def test_func(setup_func)

    print(setup_func)

结果:

执行一条用例,输出:[{"k1": "v1"}, {"k2": "v2"}]

二、与@pytest.mark.parametrize的结合

conftest.py

@pytest.fixture(scope="class")

def setup_func(request):

    print(request.param)

    return request.param

testcase.py

test_data = [{"k1": "v1"}, {"k2": "v2"}]

@pytest.mark.parametrize('setup_func', test_data, indirect=True)

def test_func(setup_func)

    setup_func

结果:

执行两条用例,分别输出:{"k1": "v1"}, {"k2": "v2"}

注:
当 indirect=False 时,“setup_func”被当成普通变量; 
当 indirect=True 时,“setup_func”被当成函数执行,且 “test_data”作为函数中的参数传递

三、fixture中的方法嵌套传递

confitest.py

@pytest.fixture(scope="class")

def setup_func1():

    test_data1 = [{"k1": "v1"}, {"k2": "v2"}]

    return test_data1

@pytest.fixture(scope="class")

def setup_func2(setup_func1):

    a = setup_func1

    b = [{"k11": "v11"}, {"k22": "v22"}]

    return (a, b)

testcase.py

def test_aaa(self, setup_func2):

        print(setup_func2)

结果:

执行一条用例,输出:([{'k1': 'v1'}, {'k2': 'v2'}], [{'k11': 'v11'}, {'k22': 'v22'}])

四、测试方法中产生数据后,直接调用teardown

@python.fixture(scope="class")

def teardown_func():

    def _teardown_func(param1, param2):

        func()

    return _teardown_func

你可能感兴趣的:(pytest,pytest)