为什么 pytest 要求指定 --tx

Why is pytest asking to specify --tx

多次测试成功后,pytest突然报错:

$ pytest -vvv -x --internal --oclint -n -32
============================= test session starts ==============================
platform darwin -- Python 3.7.7, pytest-5.4.1, py-1.7.0, pluggy-0.13.1 -- /usr/local/opt/python/bin/python3.7
cachedir: .pytest_cache
rootdir: /Users/pre-commit-hooks/code/pre-commit-hooks, inifile: pytest.ini
plugins: xdist-1.31.0, forked-1.1.3
ERROR: MISSING test execution (tx) nodes: please specify --tx

这是我的 pytest.ini:

[pytest]
markers =
    oclint: marks tests as slow (deselect with '-m "not slow"')
    internal: marks tests as checking internal components. Use this if you are developing hooks

-n # 来自 pytest-xdist,它是 pytest 的一个插件。 这对我来说很奇怪,因为在 travis linux 构建上的 pytest 在最后一次迭代之前工作得很好。

问题

为什么 pytest 要求我为我的测试添加 --tx

如果你像 -n -32 这样在 -n 数字后面用粗手指划破折号,pytest 会抱怨缺少 --tx 选项。换句话说,-n 之后的数字不能为负数,您要使用的是 -n 32.

--tx 通常用于调用 Python2.7 子进程:

pytest -d --tx popen//python=python2.7

有关使用 --tx 作为 pytest 的一部分的更多信息可以在 pytest-xdist [关于此标志的文档](pytest -d --tx popen//python=python2.7).

我遇到了同样的 pytest-xdist 错误,但原因不同。我设置了 --forked --dist=loadfile 但没有指定 --numprocesses。设置该选项修复了错误。