在pytest中,如何跳过或传送某些固定装置?

2024-05-13 21:37:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个高度固定的测试函数,它在某些fixture输入下失败(应该如此)。我怎样才能表明这一点?这就是我现在所做的,也许还有更好的方法。我对py.test还不熟悉,所以我很乐意为您提供任何建议。在

下一部分是所有的输入装置。仅供参考,example_datapackage_pathconf.test中定义

@pytest.fixture(params=[None, 'pooled_col', 'phenotype_col'])
def metadata_key(self, request):
    return request.param

@pytest.fixture(params=[None, 'feature_rename_col'])
def expression_key(self, request):
    return request.param

@pytest.fixture(params=[None, 'feature_rename_col'])
def splicing_key(self, request):
    return request.param

@pytest.fixture
def datapackage(self, example_datapackage_path, metadata_key,
                expression_key, splicing_key):
    with open(example_datapackage_path) as f:
        datapackage = json.load(f)
    datatype_to_key = {'metadata': metadata_key,
                       'expression': expression_key,
                       'splicing': splicing_key}
    for datatype, key in datatype_to_key.iteritems():
        if key is not None:
            resource = name_to_resource(datapackage, datatype)
            if key in resource:
                resource.pop(key)
    return datapackage

@pytest.fixture
def datapackage_dir(self, example_datapackage_path):
    return os.path.dirname(example_datapackage_path)

这是测试本身。在

^{pr2}$

我想做的是在metadata_key中,假设当参数是pooled_col或{}时,它将失败。我查看了pytest: Skip and xfail: dealing with tests that can not succeed,但它只讨论了参数化测试的skip和{},而没有夹具。在


Tags: pathkeyselfnonereturnpytestexamplerequest
1条回答
网友
1楼 · 发布于 2024-05-13 21:37:02

在您的datapackageexpression_key夹具中,您可以使用pytest.xfail和{},如{a1}所述。例如:

@pytest.fixture
def datapackage(self, example_datapackage_path, metadata_key,
                expression_key, splicing_key):
    if metadata_key == 'pooled_col':
        pytest.skip('metadata key is "pooled_col"')
    ...

您还可以在fixture参数中使用pytest.mark.xfail,如下例所示:

^{pr2}$

如果您希望跳过这些测试,这似乎是可行的:

@pytest.fixture(
    params=['a', pytest.mark.skipif(True, reason='reason')('b'), 'c'])
def fx1(request):
    return request.param


def test_spam(fx1):
    assert fx1

相关问题 更多 >