Pytest fixture参数传递的4种方式

最近使用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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pytest中的fixture参数是用于创建和管理测试固件的装饰器。它可以在测试函数中作为参数使用,提供可重用的测试环境和数据。 常见的fixture参数有以下几: 1. autouse:控制fixture的自动使用。如果将其设置为True,则每个测试函数都会自动使用该fixture,而无需显式引用。 2. scope:控制fixture的作用域。可以设置为"function"(默认值,每个测试函数都会调用一次fixture)、"class"(每个测试类都会调用一次fixture)、"module"(每个模块都会调用一次fixture)或"session"(整个测试过程中只会调用一次fixture)。 3. params:允许将多个参数传递fixture,以便生成不同的测试环境和数据。每个参数都会对应一个独立的fixture实例。 4. autouse、scope和params可以结合使用,以满足不同的测试需求。 示例代码如下: ```python import pytest # 定义一个简单的fixture @pytest.fixture(scope="module") def setup_module(): print("执行 setup_module") # 使用fixture def test_example(setup_module): print("执行 test_example") # 使用autouse=True的fixture @pytest.fixture(autouse=True) def setup_autouse(): print("执行 setup_autouse") # 使用params的fixture @pytest.fixture(params=[1, 2, 3]) def setup_params(request): print(f"执行 setup_params,参数值为{request.param}") # 使用autouse和scope的fixture @pytest.fixture(autouse=True, scope="class") def setup_class(): print("执行 setup_class") # 使用多个fixture def test_multiple_fixtures(setup_module, setup_autouse, setup_params): print("执行 test_multiple_fixtures") ``` 运行上述代码,输出结果如下: ``` 执行 setup_module 执行 setup_autouse 执行 setup_class 执行 setup_params,参数值为1 执行 test_example 执行 setup_params,参数值为2 执行 test_example 执行 setup_params,参数值为3 执行 test_example 执行 test_multiple_fixtures ``` 这是一个简单的示例,演示了如何使用pytest fixture参数来管理测试固件。fixture参数可以帮助我们更方便地创建、共享和管理测试环境和数据,提高测试代码的可维护性和复用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值