Pytest fixture参数传递的几种实现方式
本文详细解析Pytest中fixture在conftest与测试用例间传递参数的四种主要方式。涵盖通过函数直接返回数据、结合@pytest.mark.parametrize使用indirect参数、fixture方法嵌套调用,以及在测试方法中直接调用teardown逻辑。内容包含具体代码示例与执行结果分析,帮助开发者解决setup和teardown阶段的参数共享问题。
1.背景
最近在开发过程中使用Pytest框架的fixture机制以及conftest配置文件时,发现需要在conftest中的setup和teardown方法之间进行参数传递。为了清晰展示解决方案,这里整理并记录几种可行的实现路径。
2.fixture中参数传递的几种方式
1)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"}]
2)与@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”作为函数中的参数传递
3)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'}])
4)测试方法中产生数据后,直接调用teardown
@python.fixture(scope="class")
def teardown_func():
def _teardown_func(param1, param2):
func()
return _teardown_func到此这篇关于分享Pytest fixture参数传递的几种方式的文章就介绍到这了,更多相关Pytest参数传递内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













