Vin*_*nce 3 python fixtures pytest
似乎可以将参数传递给装置:
然而,在实现这个最小的示例时,我收到一个错误。
import pytest
@pytest.fixture
def my_fixture(v):
print("fixture in")
yield v+1
print("fixture out")
@pytest.mark.parametrize("my_fixture",[1], indirect=True)
def test_myfixture(my_fixture):
print(my_fixture)
Run Code Online (Sandbox Code Playgroud)
@pytest.fixture def my_fixture(v):未找到 E 固定装置“v”
上面的代码有什么问题吗?
(python 3.8.10,pytest-6.2.5)
简要阐述 Vince 的答案:一般来说,灯具函数的参数被解释为在定义灯具之前加载的其他灯具的名称。这就是为什么您收到错误消息fixture 'v' not found: pytest 认为您想要my_fixture依赖另一个名为v但不存在的固定装置。
这个request论证是这个一般规则的一个例外。它不涉及另一个固定装置。相反,它指示 pytest 为固定装置提供对对象的访问权限request,该对象包含有关当前正在运行的测试的信息,例如正在测试哪些参数(通过request.param)、测试具有哪些标记(通过request.node.get_closest_marker())等。
因此,要利用间接参数化,您的装置需要 (i) 接受参数request并 (ii) 对 执行某些操作request.param。有关更多信息,请参阅文档中的相关页面:
这有效:
@pytest.fixture
def my_fixture(request):
print("fixture in")
yield request.param+1 # difference here !
print("fixture out")
@pytest.mark.parametrize("my_fixture",[1], indirect=True)
def test_myfixture(my_fixture):
print(my_fixture)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8914 次 |
| 最近记录: |