Конфигурация
Параметры командной строки и настройки файла конфигурации
Получить справку по параметрам командной строки и конфигурации можно с помощью общей опции справки:
pytest -h # prints options _and_ config file settings
Будут отображены параметры командной строки и настройки файла конфигурации, зарегистрированные установленными плагинами.
Форматы файлов конфигурации
Многие параметры pytest можно задать в файле конфигурации, который по соглашению находится в корневом каталоге вашего репозитория.
Краткий пример файлов конфигурации, поддерживаемых pytest:
pytest.toml
Добавлено в версии 9.0.
Файлы pytest.toml имеют приоритет над другими файлами, даже если они пусты.
В качестве альтернативы можно использовать скрытую версию .pytest.toml.
toml
# pytest.toml or .pytest.toml
[pytest]
minversion = "9.0"
addopts = ["-ra", "-q"]
testpaths = [
"tests",
"integration",
]
pytest.ini
Файлы pytest.ini имеют приоритет над другими файлами (кроме pytest.toml и .pytest.toml), даже если они пусты.
В качестве альтернативы можно использовать скрытую версию .pytest.ini.
ini
# pytest.ini or .pytest.ini
[pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
tests
integration
pyproject.toml
Добавлено в версии 6.0.
Изменено в версии 9.0.
Для конфигурации поддерживаются файлы pyproject.toml.
toml
Используйте [tool.pytest], чтобы задействовать встроенные типы TOML (поддерживается начиная с pytest 9.0):
# pyproject.toml
[tool.pytest]
minversion = "9.0"
addopts = ["-ra", "-q"]
testpaths = [
"tests",
"integration",
]
ini
Используйте [tool.pytest.ini_options] для конфигурации в стиле INI (поддерживается начиная с pytest 6.0):
# pyproject.toml
[tool.pytest.ini_options]
minversion = "6.0"
addopts = "-ra -q"
testpaths = [
"tests",
"integration",
]
Для проектов, в которых по-прежнему используются версии pytest старше 6.0, также храните minversion в pytest.ini или setup.cfg. Эти версии не читают pyproject.toml.
tox.ini
Файлы tox.ini являются файлами конфигурации проекта tox; их также можно использовать для хранения конфигурации pytest, если они содержат раздел [pytest].
ini
# tox.ini
[pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
tests
integration
setup.cfg
Файлы setup.cfg — это файлы конфигурации общего назначения, первоначально использовавшиеся distutils (сейчас устарел) и setuptools; их также можно использовать для хранения конфигурации pytest, если они содержат раздел [tool:pytest].
ini
# setup.cfg
[tool:pytest]
minversion = 6.0
addopts = -ra -q
testpaths =
tests
integration
Предупреждение
Использование setup.cfg не рекомендуется, кроме самых простых случаев. Файлы .cfg используют парсер, отличный от парсеров pytest.ini и tox.ini, что может привести к трудно обнаруживаемым проблемам. По возможности для хранения конфигурации pytest рекомендуется использовать последние файлы или pyproject.toml.
Инициализация: определение rootdir и configfile
Для каждого запуска тестов pytest определяет rootdir, который зависит от аргументов командной строки (указанных файлов и путей тестов), а также от наличия файлов конфигурации. Определённые rootdir и configfile выводятся в заголовке pytest при запуске.
Ниже кратко описано, для чего pytest использует rootdir:
- Создание nodeid во время сбора тестов; каждому тесту назначается уникальный nodeid, начинающийся от
rootdirи учитывающий полный путь, имя класса, имя функции и параметризацию (если она есть). - Используется плагинами как стабильное место для хранения данных, специфичных для проекта или запуска тестов; например, встроенный плагин cache создаёт подкаталог
.pytest_cacheвrootdirдля хранения состояния, сохраняемого между запусками тестов.
rootdir НЕ используется для изменения sys.path/PYTHONPATH или влияния на импорт модулей. Подробнее см. в разделе механизмы импорта pytest и sys.path/PYTHONPATH.
Параметр командной строки --rootdir=path позволяет принудительно задать определённый каталог. Обратите внимание: в отличие от других параметров командной строки, --rootdir нельзя использовать с addopts в файле конфигурации, поскольку rootdir уже используется для поиска файла конфигурации.
Определение rootdir
Ниже приведён алгоритм определения rootdir на основе args:
- Если в командной строке указан
-c, использовать его как файл конфигурации, а его каталог — какrootdir. - Определить общий родительский каталог для указанных
args, распознанных как пути, существующие в файловой системе. Если такие пути не найдены, в качестве общего родительского каталога используется текущий рабочий каталог. - Искать файлы
pytest.toml,.pytest.toml,pytest.ini,.pytest.ini,pyproject.toml,tox.iniиsetup.cfgв родительском каталоге и выше. Если найдено совпадение, этот файл становитсяconfigfile, а его каталог —rootdir. - Если файл конфигурации не найден, искать
setup.py, начиная с общего родительского каталога и двигаясь вверх, чтобы определитьrootdir. - Если
setup.pyне найден, искатьpytest.toml,.pytest.toml,pytest.ini,.pytest.ini,pyproject.toml,tox.iniиsetup.cfgв каждом из указанныхargsи выше. Если найдено совпадение, этот файл становитсяconfigfile, а его каталог —rootdir. - Если
configfileне найден и аргумент конфигурации не указан, использовать уже определённый общий родительский каталог в качестве корневого. Это позволяет использовать pytest в структурах, не являющихся пакетами и не имеющих специальных файлов конфигурации.
Если args не указаны, pytest собирает тесты в текущем рабочем каталоге и ниже, а также начинает определять rootdir с этого каталога.
Файлы будут рассматриваться как конфигурационные, только если:
-
pytest.toml: всегда считается совпадением и имеет наивысший приоритет, даже если файл пуст. -
pytest.ini: всегда считается совпадением и имеет приоритет (послеpytest.tomlи.pytest.toml), даже если файл пуст. -
pyproject.toml: содержит таблицу[tool.pytest]или[tool.pytest.ini_options]. -
tox.ini: содержит раздел[pytest]. -
setup.cfg: содержит раздел[tool:pytest].
Наконец, файл pyproject.toml будет считаться configfile, если другие совпадения не найдены, даже если он не содержит таблицу [tool.pytest] (начиная с версии 9.0) или таблицу [tool.pytest.ini_options] (начиная с версии 8.1).
Файлы рассматриваются в указанном выше порядке. Параметры из нескольких кандидатов configfiles никогда не объединяются — используется первый найденный.
Файл конфигурации также определяет значение rootpath.
Объект Config (доступный через хуки или фикстуру pytestconfig) впоследствии будет содержать следующие атрибуты:
-
config.rootpath: определённый корневой каталог, существование которого гарантировано. Он используется как базовый каталог для формирования адресов тестов («nodeid») и может также применяться плагинами для хранения данных о каждом запуске тестов. -
config.inipath: определённыйconfigfile, может бытьNone(по историческим причинам называетсяinipath).
Добавлено в версии 6.1: Свойства config.rootpath и config.inipath. Это версии pathlib.Path прежних config.rootdir и config.inifile, имеющих тип py.path.local и сохранённых для обратной совместимости.
Пример:
pytest path/to/testdir path/other/
общим родительским каталогом будет path, после чего файлы конфигурации будут проверяться в следующем порядке:
# first look for path/pytest.toml path/pytest.toml path/pytest.ini path/pyproject.toml # must contain a [tool.pytest] table to match path/tox.ini # must contain [pytest] section to match path/setup.cfg # must contain [tool:pytest] section to match pytest.toml 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 (см. также #1435). Для ссылки на текущий рабочий каталог также можно использовать точку ..
Встроенные параметры файла конфигурации
Полный список параметров см. в справочной документации.
Настройка темы подсветки синтаксиса
Темы подсветки синтаксиса, используемые pytest, можно настроить с помощью двух переменных среды:
-
PYTEST_THEMEзадаёт используемый стиль Pygments. -
PYTEST_THEME_MODEзадаёт для этого стиля значение светлый или тёмный.
© 2015–2026 Holger Krekel and pytest-dev team
Licensed under the MIT License.
https://docs.pytest.org/en/stable/reference/customize.html