怎么在 fixture的函数中传递参数
时间: 2024-03-12 07:44:28 浏览: 96
在 pytest fixture 的函数中传递参数可以通过两种方式来实现:
1. 使用 `request` 对象的 `fixturename` 属性
在 fixture 函数中,可以通过 `request` 对象的 `fixturename` 属性获取当前 fixture 的名称,并通过 `request.module` 获取当前 fixture 所在的模块对象,从而访问该模块中定义的变量或函数。例如:
```python
import pytest
@pytest.fixture
def my_fixture(request, my_param):
print(f"my_param = {my_param}")
return 42
def test_my_fixture(my_fixture):
assert my_fixture == 42
```
在这个例子中,`my_fixture` fixture 函数通过参数 `request` 获取了当前 fixture 的名称,并通过 `my_param` 参数获取了在同一模块中定义的 `my_param` 变量的值。在这个例子中,`my_param` 的值是通过 `conftest.py` 文件中的另一个 fixture 函数 `my_param` 传递过来的。
2. 使用 `@pytest.fixture` 的 `params` 参数
另一种在 fixture 函数中传递参数的方式是使用 `@pytest.fixture` 的 `params` 参数,这个参数可以将多个参数值传递给 fixture 函数,并将其作为参数传递给测试函数。例如:
```python
import pytest
@pytest.fixture(params=[1, 2, 3])
def my_fixture(request):
print(f"my_param = {request.param}")
return request.param
def test_my_fixture(my_fixture):
assert my_fixture > 0
```
在这个例子中,`my_fixture` fixture 函数使用 `params` 参数指定了三个参数值:1、2、3。在测试函数 `test_my_fixture` 中,`my_fixture` 作为参数传递进去,它的值会依次取到 1、2、3,每次都会执行一遍测试函数。在 fixture 函数中,可以通过 `request.param` 获取当前参数值,并进行一些操作。
阅读全文