Spec-Zone.ru › pytest

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

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

Получить справку по параметрам командной строки и конфигурации можно с помощью общей опции справки:

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API