Вы можете проверить, определена ли для группы xdist
опция numprocesses
arg. Это указывает на то, что pytest-xdist
установлено и опция будет обработана. Если это не так, ваш собственный фиктивный аргумент гарантирует, что опция известна как pytest
(и безопасно игнорируется):
# conftest.py
def pytest_addoption(parser):
argdests = {arg.dest for arg in parser.getgroup('xdist').options}
if 'numprocesses' not in argdests:
parser.getgroup('xdist').addoption(
'--numprocesses', dest='numprocesses', metavar='numprocesses', action='store',
help="placeholder for xdist's numprocesses arg; passed value is ignored if xdist is not installed"
)
Теперь вы можете оставить параметр в pytest.ini
, даже если pytest-xdist
не установлен; тем не менее, вам нужно будет использовать длинный параметр:
[pytest]
addopts=--numprocesses=auto
Причина в том, что короткие параметры зарезервированы для самого pytest
, поэтому приведенный выше код не определяет и не использует его. Если вам действительно нужен короткий вариант, вы должны прибегнуть к закрытому методу:
parser.getgroup('xdist')._addoption('-n', '--numprocesses', dest='numprocesses', ...)
Теперь вы можете использовать краткую опцию в конфигурации:
[pytest]
addopts=-nauto