Pytest之fixture中的参数传递

目录

1.背景

2.fixture中参数传递的几种方式

1)fixture中的函数返回

2)与@pytest.mark.parametrize的结合

3)fixture中的方法嵌套传递

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

3.参考资料


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

3.参考资料

fixture传参使用 - 为什么我还是学渣 - 博客园

Pytest之fixture使用详解 - 冰凝er - 博客园

Pytest - setup、teardown、fixture的详细使用 - 一加一 - 博客园

python-pytest测试框架中的setup和teardown - 昆虫白 - 博客园

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest fixture 的参数是通过函数参数传递的,具体传递方式有两种:一种是使用 `@pytest.fixture` 的 `params` 参数,另一种是在测试函数直接传递参数。下面分别给出示例: 1. 使用 `@pytest.fixture` 的 `params` 参数传递参数 ```python import pytest @pytest.fixture(params=[1, 2, 3]) def my_fixture(request): return request.param def test_my_fixture(my_fixture): assert my_fixture > 0 ``` 在这个例子,`@pytest.fixture` 声明了一个 fixture 函数 `my_fixture`,并使用 `params` 参数指定了三个参数值:1、2、3。在测试函数 `test_my_fixture` ,`my_fixture` 作为参数传递进去,它的值会依次取到 1、2、3,每次都会执行一遍测试函数。因为 `assert` 语句的条件 `my_fixture > 0` 满足,所以测试函数通过。 2. 在测试函数直接传递参数 ```python import pytest @pytest.fixture def my_fixture(): return 42 def test_my_fixture(my_fixture): assert my_fixture == 42 def test_my_fixture_with_param(): param = 24 assert my_fixture(param) == 66 ``` 在这个例子,`@pytest.fixture` 声明了一个 fixture 函数 `my_fixture`,它返回了一个值 42。在测试函数 `test_my_fixture` ,`my_fixture` 作为参数传递进去,这个测试函数断言 `my_fixture` 返回的值等于 42。在测试函数 `test_my_fixture_with_param` ,我们创建了一个参数 `param`,并通过 `my_fixture(param)` 的方式直接调用了 fixture 函数,并传递了参数 `param`。这里我们规定,`my_fixture` 函数接收一个整数参数,然后把它加上 42 再返回。因此,测试函数 `test_my_fixture_with_param` 的断言条件是 `my_fixture(param) == 66`。这个测试函数通过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值