如果安装了 pytest-xdist,如何通过 pytest -nauto 启用并行性?
How can I enable parallelism via pytest -nauto if pytest-xdist is installed?
要启用并行测试,必须安装 pytest-xdist
并使用将 -nauto
选项传递给 pytest
以使用所有可用的 CPU。我想默认启用 -nauto
,但仍然使 pytest-xdist
可选。所以这行不通:
[pytest]
addopts = -nauto
如果安装了 pytest-xdist
,有没有办法默认启用 pytest 并行性? (如果需要,也可以使用 pytest -n0
再次禁用它。)
我猜想必须写一些 conftest.py
钩子?加载插件后 possible to detect installed plugins, but pytest_configure 是 运行,这可能为时已晚。此外,我不确定此时如何添加选项(或如何配置直接操作 xdist)。
您可以检查 xdist
选项组是否定义了 numprocesses
arg。这表示安装了 pytest-xdist
并且将处理该选项。如果不是这种情况,您自己的虚拟 arg 将确保该选项为 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-xdist
没有安装,您也可以保留 pytest.ini
中的选项;但是,您需要使用长选项:
[pytest]
addopts=--numprocesses=auto
原因是短选项是为 pytest
本身保留的,所以上面的代码没有定义或使用它。如果你真的需要 short 选项,你必须求助于私有方法:
parser.getgroup('xdist')._addoption('-n', '--numprocesses', dest='numprocesses', ...)
现在您可以在配置中使用短选项:
[pytest]
addopts=-nauto
要启用并行测试,必须安装 pytest-xdist
并使用将 -nauto
选项传递给 pytest
以使用所有可用的 CPU。我想默认启用 -nauto
,但仍然使 pytest-xdist
可选。所以这行不通:
[pytest]
addopts = -nauto
如果安装了 pytest-xdist
,有没有办法默认启用 pytest 并行性? (如果需要,也可以使用 pytest -n0
再次禁用它。)
我猜想必须写一些 conftest.py
钩子?加载插件后 possible to detect installed plugins, but pytest_configure 是 运行,这可能为时已晚。此外,我不确定此时如何添加选项(或如何配置直接操作 xdist)。
您可以检查 xdist
选项组是否定义了 numprocesses
arg。这表示安装了 pytest-xdist
并且将处理该选项。如果不是这种情况,您自己的虚拟 arg 将确保该选项为 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-xdist
没有安装,您也可以保留 pytest.ini
中的选项;但是,您需要使用长选项:
[pytest]
addopts=--numprocesses=auto
原因是短选项是为 pytest
本身保留的,所以上面的代码没有定义或使用它。如果你真的需要 short 选项,你必须求助于私有方法:
parser.getgroup('xdist')._addoption('-n', '--numprocesses', dest='numprocesses', ...)
现在您可以在配置中使用短选项:
[pytest]
addopts=-nauto