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