Как включить параллелизм с помощью pytest -nauto, если установлен pytest-xdist?
Чтобы включить параллельные тесты, нужно установить pytest-xdist
и использовать передать -nauto
возможность pytest
использовать все доступные процессоры. Я хотел бы включить -nauto
по умолчанию, но все равно сделать pytest-xdist
необязательный. Так что это не будет работать:
[pytest]
addopts = -nauto
Есть ли способ включить параллельный параллелизм по умолчанию, если pytest-xdist
установлено? (Также должно быть возможно отключить его снова с помощью pytest -n0
при желании.)
Я думаю, что какой-то conftest.py
крючок должен быть написан? Можно обнаружить установленные плагины, но pytest_configure запускается после загрузки плагинов, что может быть слишком поздно. Кроме того, я не уверен, как опции могут быть добавлены в этот момент (или как настроить напрямую манипулировать xdist).
1 ответ
Вы можете проверить, является ли xdist
группа опций имеет numprocesses
Аргумент определен. Это указывает на то, что 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