Конфигурация¶
Параметры командной строки и настройки конфигурационного файла¶
Вы можете получить справку по опциям командной строки и значениям в конфигурационных файлах в стиле 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, можно настроить с помощью двух переменных окружения:
PYTEST_THEME
устанавливает pygment style для использования.PYTEST_THEME_MODE
устанавливает этот стиль в светлый или темный.