1

要启用并行测试,必须安装pytest-xdist并使用 pass-nauto选项pytest以使用所有可用的 CPU。我想-nauto默认启用,但仍然是pytest-xdist可选的。所以这行不通:

[pytest]
addopts = -nauto

如果已安装,有没有办法默认启用 pytest 并行pytest-xdist性?(如果需要,也应该可以再次禁用它pytest -n0。)

我想必须写某种conftest.py钩子?可以检测已安装的插件,但pytest_configure在加载插件后运行,这可能为时已晚。此外,我不确定此时如何添加选项(或如何配置直接操作 xdist)。

4

1 回答 1

1

您可以检查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.ini即使pytest-xdist未安装;但是,您将需要使用 long 选项:

[pytest]
addopts=--numprocesses=auto

原因是短选项是为pytest自己保留的,所以上面的代码没有定义或使用它。如果你真的需要短选项,你必须求助于私有方法:

parser.getgroup('xdist')._addoption('-n', '--numprocesses', dest='numprocesses', ...)

现在您可以在配置中使用 short 选项:

[pytest]
addopts=-nauto
于 2019-01-05T01:58:44.837 回答