pytest 8.3.3
我有 2 个灯具,均使用 params=...
: 进行参数化
import pytest
@pytest.fixture(params=["opt1_notsmoke", "opt1_smoke"])
def opt1(request):
return request.param
@pytest.fixture(params=["opt2_notsmoke", "opt2_smoke"])
def opt2(request):
return request.param
def test_1(opt1, opt2):
print(opt1)
print(opt2)
pytest pt.py --collect-only
收集正确的对:
<Module pt.py>
<Function test_1[opt1_notsmoke-opt2_notsmoke]>
<Function test_1[opt1_notsmoke-opt2_smoke]>
<Function test_1[opt1_smoke-opt2_notsmoke]>
<Function test_1[opt1_smoke-opt2_smoke]>
但是,当我尝试在两个灯具中标记单个参数时,结果似乎不太正确:
@pytest.fixture(params=["opt1_notsmoke", pytest.param("opt1_smoke", marks=pytest.mark.smoke)])
def opt1(request):
return request.param
@pytest.fixture(params=["opt2_notsmoke", pytest.param("opt2_smoke", marks=pytest.mark.smoke)])
def opt2(request):
return request.param
pytest pt.py --collect-only -m smoke
已收集:
<Module pt.py>
<Function test_1[opt1_notsmoke-opt2_smoke]>
<Function test_1[opt1_smoke-opt2_notsmoke]>
<Function test_1[opt1_smoke-opt2_smoke]>
我认为带有
*notsmoke
的节点根本不应该被收集。同时,无论我选择哪一个,在单个夹具中标记参数都可以正常工作。它收集正确的节点:
@pytest.fixture(params=["opt1_notsmoke", pytest.param("opt1_smoke", marks=pytest.mark.smoke)])
def opt1(request):
return request.param
@pytest.fixture(params=["opt2_without_mark"])
def opt2(request):
return request.param
opt1-notsmoke
未按预期收集:
<Module pt.py>
<Function test_1[opt1_smoke-opt2_without_mark]>
我是否不知道一些底层的 pytest 逻辑?希望有任何帮助,提前致谢!
我尝试在参数化夹具内标记参数,但它仅在我在单个夹具中执行此操作时才有效。
如果有人感兴趣,这是设计使然。这里详细阐述: https://github.com/pytest-dev/pytest/issues/12909