Маркировка прибора Pytest вместо всех тестов с использованием прибора - PullRequest
2 голосов
/ 21 октября 2019

Есть ли способ определить метку в приборе PyTest?

Я пытаюсь отключить медленные тесты, когда я указываю -m "not slow" в pytest.

Мне удалось отключить отдельные тесты, но я не могу использовать прибор для нескольких тестов.

Мой код прибора выглядит следующим образом:

@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 Ответ

1 голос
/ 21 октября 2019

Кажется, вы уже нашли ответ в документации. Подпишитесь на 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...