Могу ли я заставить модуль doctest pytest игнорировать файл?

Мы используем pytest для тестирования нашего проекта и по умолчанию включили --doctest-modules для сбора всех наших doctests со всего проекта.

Однако есть один wsgi.py, который нельзя импортировать во время сбора тестов, но я не могу заставить pytest игнорировать его.

Я пытался поместить его в список collect_ignore в conftest.py, но видимо модуль doctest не использует этот список.

Единственное, что работает, — это поместить весь каталог wsgi.py в norecursedirs в файле конфигурации pytest, но это, очевидно, скрывает весь каталог, чего я не хочу.

Есть ли способ заставить модуль doctest игнорировать только определенный файл?


person NiklasMM    schedule 28.12.2016    source источник
comment
Это может быть полезно docs.pytest.org/en/stable/example/pythoncollection. html   -  person Erel Segal-Halevi    schedule 01.02.2021


Ответы (2)


Вы можете использовать ловушку, чтобы условно исключить некоторые папки из тестового обнаружения. https://docs.pytest.org/en/latest/writing_plugins.html

def pytest_ignore_collect(path, config):
    """ return True to prevent considering this path for collection.
    This hook is consulted for all files and directories prior to calling
    more specific hooks.
    """
person ANDgineer    schedule 29.12.2016

Как уже упоминал MasterAndrey, pytest_ignore_collect должен помочь. Важно отметить, что вы должны поместить conftest.py в корневую папку (из которой вы запускаете тесты).
Пример:

import sys

def pytest_ignore_collect(path):
    if sys.version_info[0] > 2:
        if str(path).endswith("__py2.py"):
            return True
    else:
        if str(path).endswith("__py3.py"):
            return True

Начиная с pytest v4.3.0 также есть флаг --ignore-glob, который позволяет игнорировать шаблон. Пример: pytest --doctest-modules --ignore-glob="*__py3.py" dir/

person Grygorii Iermolenko    schedule 07.03.2019
comment
Важнейшей частью для меня было поместить этот хук pytest_ignore_collect в conftest.py в root проекта. У нас в каталоге tests был файл conftest.py с несколькими настройками, и поместить туда хук не получилось. - person patrickdepinguin; 09.06.2019
comment
хммм ... это просто дает мне целую кучу E KeyError: '--doctest-modules' - person joel; 08.08.2020