我可以根据夹具参数 ID 使用 pytest.mark.skipif 吗?

Can I use pytest.mark.skipif based on fixture parameter ID?

我的 conftest.py 文件中有一个夹具,它具有三个参数:

@pytest.fixture(scope="session",
        params=[(33, 303), (303, 3003), (3003, 300003)],
        ids=["small", "medium", "large"])
def complete(request):
    np.random.seed(1234567890)
    return np.random.rand(*request.param)

现在,对于一个特定的长 运行 测试函数,我想跳过 "large" 案例。

@pytest.mark.skipif(...)
def test_snafu(complete):
    assert ...

这有可能吗?

不清楚你在找什么

截至目前,跳过标记评估无法访问测试元数据 您可能想在测试函数

中调用 pytest.skip

当然有可能。就像下图一样 我正在跳过我用来参数化夹具的 4 个参数中的某个参数(使用 skipif)。

并且在测试执行中,确实发生了跳过,调用测试class中的所有测试只会执行夹具的前三个参数和夹具执行或处理我们标记为skip的param会根据一定的条件被跳过

@pytest.fixture(
    scope='class',
    params=[
        conf.ACCOUNT_OWNER_ROLE,
        conf.ACCOUNT_READ_ONLY_ROLE,
        conf.ACCOUNT_ADMIN_ROLE,
        pytest.param(conf.PROJECT_USER_ROLE, marks=pytest.mark.skipif(
                environ.get('ENV_FOR_DYNACONF') == 'production',
                reason="This feature isn't yet released to production")
                         ),
    ],
    ids=[
        'Invitee has Account-owner role',
        'Invitee has Account-read-only role',
        'Invitee has Account-Admin role',
        'Invitee has Project-user role',
    ],
)
def my_rbac_root_fixture(
    request,
    spark_client_project_fix,
    spark_client_account_fix,
    spark_client_account_fix_invitee,
):

如果您需要有关此 @Midnighter 的更多详细信息,请告诉我