Как я могу включить параллелизм через pytest -nauto, если установлен pytest-xdist? - PullRequest
0 голосов
/ 04 января 2019

Чтобы включить параллельные тесты, необходимо установить pytest-xdist и использовать параметр -nauto для pytest, чтобы использовать все доступные процессоры. Я бы хотел включить -nauto по умолчанию, но все равно сделать pytest-xdist необязательным. Так что это не будет работать:

[pytest]
addopts = -nauto

Есть ли способ включить параллельный параллелизм по умолчанию, если установлена ​​pytest-xdist? (Также должно быть возможно отключить его снова с помощью pytest -n0, если необходимо.)

Полагаю, что-то типа conftest.py должно быть написано? возможно для обнаружения установленных плагинов, но pytest_configure запускается после загрузки плагинов, что может быть слишком поздно. Кроме того, я не уверен, как на этом этапе можно добавить параметры (или как настроить непосредственное управление xdist).

1 Ответ

0 голосов
/ 05 января 2019

Вы можете проверить, определена ли для группы 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
...