标记Pytest固定装置,而不是使用固定装置进行的所有测试

时间:2019-10-21 19:12:11

标签: pytest

是否可以在PyTest灯具中定义标记?

我尝试在pytest中指定-m "not slow"时禁用慢速测试。

我已经能够禁用单个测试,但不能禁用用于多个测试的夹具。

我的灯具代码如下:

@pytest.fixture()
@pytest.mark.slow
def postgres():
    # get a postgres connection (or something else that uses a slow resource)
    yield conn 

和一些测试具有以下一般形式:

def test_run_my_query(postgres):
    # Use my postgres connection to insert test data, then run a test
    assert ...

我在https://docs.pytest.org/en/latest/mark.html中发现了以下评论:

“标记只能应用于测试,而不会影响灯具。”注释的原因是夹具本质上是函数调用,而标记只能在编译时指定吗?

是否有一种方法可以指定使用特定固定装置(在这种情况下为postgres)的所有测试都可以标记为慢速而无需在每个测试上指定@pytest.mark.slow

1 个答案:

答案 0 :(得分:1)

似乎您已经在文档中找到了答案。订阅https://github.com/pytest-dev/pytest/issues/1368观看此功能,它可能会在更高的pytest版本中添加。

就目前而言,您可以采取一些变通办法来解决:

# in conftest.py

def pytest_collection_modifyitems(items):
    for item in items:
        if 'postgres' in getattr(item, 'fixturenames', ()):
            item.add_marker("slow")