大概意思就是,我希望 test02 的 param 的值是 test01 的返回列表
params 中传入几个值,在调用 test02 的时候 对应的测试用例就会运行几次
直接把 test1 放到 test2()的括号内
不是我要实现的目的,可能我没说清楚,我的目的是一个 fixture 的返回列表,用来做另一个 fixture 的参数化,而不是直接把列表全传给他
首先你这个逻辑就是错的,夹具函数本身只返回一个值或者不返回,即使是加入 yield,也不能实现分批次返回。“When using yield the code block after the yield statement is executed as teardown code regardless of the test outcome, and must yield exactly once.”
所以,你要把夹具函数当成@pytest.mark.parametrize
用?夹具函数本身就不具备参数化的能力,重新设计你的脚本逻辑,再深刻点理解一下夹具函数的定义
Decorator to mark a fixture factory function.
This decorator can be used, with or without parameters, to define a fixture function.
The name of the fixture function can later be referenced to cause its invocation ahead of running tests: test modules or classes can use the pytest.mark.usefixtures(fixturename) marker.
Test functions can directly use fixture names as input arguments in which case the fixture instance returned from the fixture function will be injected.
Fixtures can provide their values to test functions using return or yield statements. When using yield the code block after the yield statement is executed as teardown code regardless of the test outcome, and must yield exactly once.
在 pytest 中,可以使用 fixture 的返回值作为另一个 fixture 的参数化值。可以通过使用 pytest 的 parametrize
装饰器来实现。
下面是一个示例代码:
import pytest
@pytest.fixture
def my_fixture():
# 返回一个列表作为参数化的值
return [1, 2, 3]
@pytest.fixture(params=pytest.fixture('my_fixture'))
def my_parametrized_fixture(request):
return request.param
def test_my_test(my_parametrized_fixture):
print(my_parametrized_fixture)
在上述示例中,my_fixture
作为一个 fixture,返回了一个列表 [1, 2, 3]
。然后,my_parametrized_fixture
使用 params
参数指定为 pytest.fixture('my_fixture')
,意味着它的参数值来自于 my_fixture
的返回值。在 test_my_test
中,my_parametrized_fixture
就会被自动作为参数传入。
注意,在 @pytest.fixture(params=pytest.fixture('my_fixture'))
中,my_fixture
是一个字符串,表示引用 my_fixture
这个 fixture 的返回值。
这样,每个参数会依次传递给 test_my_test
函数,并执行相应的测试用例。
我理解你的意思,但是我觉得你的思路不是特别好。不过下面的代码是能够在另一个 fixture 中获取前一个 fixture 的返回值,不过他依然不是参数化的形式,因为你在另外一个测试用例中调用它,它不是参数化的形式执行的。
import pytest
@pytest.fixture
def f_01():
return [1, 3, 5]
@pytest.fixture(params=["f_01"])
def f_02(request):
print(request.getfixturevalue(request.param))
谢谢,不过我想的是能够根据一个 fixture 的返回列表来做参数化,pytest-lazy-fixtures 只能在用例执行时,被解析成具体的返回值,而在初始化 fixture 时,会报 TypeError: 'LazyFixture' object is not iterable,有什么好办法解决吗
@ 陈平安 我也有相同的问题,请问你解决了嘛?