Конфигурация

Параметры командной строки и настройки конфигурационного файла

Вы можете получить справку по опциям командной строки и значениям в конфигурационных файлах в стиле INI, используя опцию общей справки:

pytest -h   # prints options _and_ config file settings

Здесь будут отображены настройки командной строки и конфигурационного файла, которые были зарегистрированы установленными плагинами.

Форматы файлов конфигурации

Многие pytest settings могут быть заданы в файле конфигурации, который по соглашению находится в корневом каталоге вашего репозитория.

Небольшой пример конфигурационных файлов, поддерживаемых pytest:

pytest.ini

Файлы pytest.ini имеют приоритет над другими файлами, даже если они пусты.

В качестве альтернативы можно использовать скрытую версию .pytest.ini.

# pytest.ini or .pytest.ini
[pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
    tests
    integration

pyproject.toml

Добавлено в версии 6.0.

pyproject.toml рассматриваются для конфигурации, если они содержат таблицу tool.pytest.ini_options.

# pyproject.toml
[tool.pytest.ini_options]
minversion = "6.0"
addopts = "-ra -q"
testpaths = [
    "tests",
    "integration",
]

Примечание

Может возникнуть вопрос, почему [tool.pytest.ini_options], а не [tool.pytest], как в случае с другими инструментами.

Причина в том, что команда pytest намерена в будущем полностью использовать богатый формат данных TOML для конфигурации, зарезервировав для этого таблицу [tool.pytest]. Таблица ini_options пока используется как мост между существующей системой конфигурации .ini и будущим форматом конфигурации.

tox.ini

Файлы tox.ini являются конфигурационными файлами проекта tox, и могут также использоваться для хранения конфигурации pytest, если они имеют секцию [pytest].

# tox.ini
[pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
    tests
    integration

setup.cfg

Файлы setup.cfg являются конфигурационными файлами общего назначения, первоначально использовались distutils, и могут также использоваться для хранения конфигурации pytest, если они имеют секцию [tool:pytest].

# setup.cfg
[tool:pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
    tests
    integration

Предупреждение

Использование setup.cfg не рекомендуется, за исключением очень простых случаев. Файлы .cfg используют парсер, отличный от pytest.ini и tox.ini, что может привести к трудноотслеживаемым проблемам. Когда это возможно, рекомендуется использовать последние файлы, или pyproject.toml, для хранения конфигурации pytest.

Инициализация: определение rootdir и configfile

pytest определяет rootdir для каждого запуска теста, который зависит от аргументов командной строки (заданных тестовых файлов, путей) и от существования конфигурационных файлов. Определенные rootdir и configfile выводятся как часть заголовка pytest при запуске.

Вот краткое описание того, для чего pytest использует rootdir:

  • Построение nodeids во время сбора; каждому тесту присваивается уникальный nodeid, который коренится в rootdir и учитывает полный путь, имя класса, имя функции и параметризацию (если есть).

  • Используется плагинами как стабильное место для хранения специфической информации о проекте/запуске теста; например, внутренний плагин cache создает подкаталог .pytest_cache в rootdir для хранения состояния кросс-тестового запуска.

rootdir НЕ используется для модификации sys.path/PYTHONPATH или влияния на то, как импортируются модули. Более подробную информацию смотрите в механизмы импорта pytest и sys.path/PYTHONPATH.

Опция командной строки --rootdir=path может быть использована для принудительного указания конкретного каталога. Обратите внимание, что в отличие от других опций командной строки, --rootdir не может использоваться с addopts внутри pytest.ini, поскольку rootdir используется для поиска pytest.ini.

Нахождение rootdir

Вот алгоритм, который находит rootdir из args:

  • Если в командной строке передано -c, используйте его как конфигурационный файл, а его каталог как rootdir.

  • Определить общий каталог-предок для указанных args, которые распознаются как пути, существующие в файловой системе. Если таких путей не найдено, общий каталог-предок устанавливается в текущий рабочий каталог.

  • Ищите файлы pytest.ini, pyproject.toml, tox.ini и setup.cfg в каталоге-предке и выше. Если один из них найден, он становится configfile, а его каталог становится rootdir.

  • Если конфигурационный файл не найден, ищите setup.py вверх по каталогу общего предка, чтобы определить rootdir.

  • Если не найдено ни одного setup.py, ищите pytest.ini, pyproject.toml, tox.ini и setup.cfg в каждом из указанных args и выше. Если один из них найден, он становится configfile, а его каталог становится rootdir.

  • Если не найдено configfile и не передан аргумент конфигурации, то в качестве корневого каталога используется уже определенный общий предок. Это позволяет использовать pytest в структурах, которые не являются частью пакета и не имеют определенного конфигурационного файла.

Если не указано args, pytest собирает тест ниже текущего рабочего каталога и начинает определять rootdir оттуда.

Файлы будут сопоставлены для конфигурации только в том случае, если:

  • pytest.ini: всегда будет соответствовать и иметь приоритет, даже если он пуст.

  • pyproject.toml: содержит таблицу [tool.pytest.ini_options].

  • tox.ini: содержит раздел [pytest].

  • setup.cfg: содержит раздел [tool:pytest].

Файлы рассматриваются в указанном выше порядке. Варианты из нескольких кандидатов configfiles никогда не объединяются - побеждает первый совпавший вариант.

Объект Config (доступный через крючки или через приспособление pytestconfig) впоследствии будет нести эти атрибуты:

  • config.rootpath: определенный корневой каталог, гарантированно существующий.

  • config.inipath: определенный configfile, может быть None (он назван inipath по историческим причинам).

Добавлено в версии 6.1: Свойства config.rootpath и config.inipath. Они являются pathlib.Path версиями более старых config.rootdir и config.inifile, которые имеют тип py.path.local, и все еще существуют для обратной совместимости.

Каталог rootdir используется в качестве справочного каталога для построения адресов тестов («nodeids») и может также использоваться плагинами для хранения информации о каждом запуске теста.

Пример:

pytest path/to/testdir path/other/

определит общего предка как path и затем проверит наличие конфигурационных файлов следующим образом:

# first look for pytest.ini files
path/pytest.ini
path/pyproject.toml  # must contain a [tool.pytest.ini_options] table to match
path/tox.ini         # must contain [pytest] section to match
path/setup.cfg       # must contain [tool:pytest] section to match
pytest.ini
... # all the way up to the root

# now look for setup.py
path/setup.py
setup.py
... # all the way up to the root

Предупреждение

Пользовательские аргументы командной строки плагина pytest могут включать путь, как в pytest --log-output ../../test.log args. Тогда args является обязательным, иначе pytest использует папку test.log для определения rootdir (см. также issue #1435). Также возможна точка . для ссылки на текущий рабочий каталог.

Опции встроенного файла конфигурации

Для получения полного списка опций обратитесь к reference documentation.

Настройка темы с подсветкой синтаксиса

Темы подсветки синтаксиса, используемые pytest, можно настроить с помощью двух переменных окружения:

Вернуться на верх