为什么在多个灯具上打标参数不起作用?

问题描述 投票:0回答:1

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 逻辑?希望有任何帮助,提前致谢!

我尝试在参数化夹具内标记参数,但它仅在我在单个夹具中执行此操作时才有效。

pytest pytest-fixtures pytest-markers
1个回答
0
投票

如果有人感兴趣,这是设计使然。这里详细阐述: https://github.com/pytest-dev/pytest/issues/12909

© www.soinside.com 2019 - 2024. All rights reserved.