Конфигурирование¶
Опции командной строки и настройки конфигурационного файла¶
Чтобы получить помощь по командной строке и настройкам конфигурационных
файлов, используйте стандартную опцию -h:
pytest -h # справка по опциям и настройкам конфигурационного файла
Будут отображены опции командной строки и конфигурационных файлов, которые зарегистрированы установленными плагинами.
Инициализация: определение корневой директории и файла инициализации¶
pytest определяет корневую директорию rootdir при каждом прогоне тестов
в зависимости от параметров командной строки (уточняющих пути и файлы)
и существования инициализирующих файлов (ini-files).
Определенные таким образом rootdir и ini-file печатаются
в заголовочной части при запуске pytest.
Для чего pytest использует rootdir:
Для генерации идентификаторов узлов во время сборки тестов; каждому тесту сопоставляется уникальный nodeid относительно
rootdir, который учитывает полный путь, имена класса и функции, а также значение параметризации (если есть).Используется плагинами для хранения специфичной для проекта/запуска тестов информации; к примеру, внутренний плагин cache создает в
rootdirподдиректорию.pytest_cacheдля хранения состояний выполнения тестов.
rootdir НЕ используется для модификации sys.path/PYTHONPATH
и не оказывает влияния на импорт модулей. Подробнее см. sys.path/PYTHONPATH и механизм импорта pytest.
Опцию командной строки --rootdir=path указывают для принудительной
установки определенного каталога. Передаваемый каталог может включать
переменные окружения, если используется совместно с addopts из файла pytest.ini.
Алгоритм нахождения rootdir¶
Вот алгоритм поиска корневого каталога из args:
определяем общий родительский каталог для переданных аргументов, которые распознаны в качестве существующих путей файловой системы. Если таких аргументов-путей нет, то текущей рабочей директорией становится общий родительский каталог;
ищем файлы
pytest.ini,tox.iniиsetup.cfgв каталоге-предке и выше. Если находим - он становится ini-файлом, а его каталог становитсяrootdir.если ini-файлы не найдены, для определения
rootdirищем файлsetup.pyвверх от общего каталога-предка.если файл
setup.pyне найден, ищем файлыpytest.ini,tox.iniиsetup.cfgв каждом указанном аргументеargsи выше. Если нашли - он становится ini-файлом, а его директория становится корневой.если вообще никаких ini-файлов не найдено, то в качестве
rootdirиспользуется уже определенный общий каталог-предок. Это позволяет использоватьpytestв стуктурах, которые не являются частью пакета и не имеют никакой конкретной конфигурации.
Если никакие args не указаны, pytest начинает определение
rootdir из текущего рабочего каталога и оттуда же собирает тесты.
Предупреждение
В настраиваемых плагинах pytest аргументы командной строки
могут включать путь, как в pytest --log-output ../../test.log args.
В этом случае передавать args обязательно, в противном случае
pytest использует для определения корневой директории папку test.log
(также см. issue 1435).
Для ссылки на текущий рабочий каталог можно использовать точку ".".
Обратите внимание, что существующий файл pytest.ini всегда будет считаться ini-файлом,
тогда как tox.ini и setup.cfg файлы должны содержать секции [pytest]
или [tool:pytest] соответственно. Опции из разных кандидатов в ini-файлы
никогда не сливаются - побеждает первый найденный (при этом pytest.ini побеждает
всегда, даже если в нем нет секции [pytest]).
Затем объект config приобретает следующие атрибуты:
config.rootdir: определенная корневая директория, гарантированно существует.config.inifile: определенный ini-файл, может быть иNone.
rootdir используется для генерации идентификаторов узлов тестов
(«nodeids»). Ее также могут использовать плагины для хранения
установочной информации.
Пример:
pytest path/to/testdir path/other/
здесь определяется общий предок path и
потом ini-файлы ищутся следующим образом:
# первый круг поиска файлов pytest.ini
path/pytest.ini
path/tox.ini # должен содержать секцию [pytest]
path/setup.cfg # должен содержать секцию [tool:pytest]
pytest.ini
... # все пути вплоть до корня
# теперь ищем setup.py
path/setup.py
setup.py
... # все пути вплоть до корня
Как изменить опции командной строки по умолчанию¶
Печатать одни и те жа параметры командной строки каждый раз при запуске
pytest может быть утомительно. К примеру, вы всегда хотели бы
видеть подробную информацию и пропущенных и «xfail» тестах
и лаконичную «точку» для прошедших. Тогда вы можете
написать в конфигурационном файле:
# content of pytest.ini or tox.ini
[pytest]
addopts = -ra -q
# content of setup.cfg
[tool:pytest]
addopts = -ra -q
Кроме того, можно установить переменную окружения PYTEST_ADDOPTS, чтобы
добавить параметры командной строки для использования в этой среде:
export PYTEST_ADDOPTS="-v"
Вот как конструируется командная строка при наличии
addopts или переменных окружения:
<pytest.ini:addopts> $PYTEST_ADDOPTS <extra command-line arguments>
Так что если пользователь напишет в командной строке:
pytest -m slow
фактически будет выполнена команда:
pytest -ra -q -v -m slow
Обратите внимание, что как и в других интерпретируемых приложениях,
если параметры конфликтуют друг с другом - применяется последний.
Поэтому в примере выше будет показан подробный вывод, поскольку
опция -v перезапишет опцию -q.
Встроенные параметры конфигурационного файла¶
Полный лист возможных настроек конфигурационного файла см. reference documentation.