带有模块范围的fixture的pytest xdist



夹具将运行多少次:

@pytest.fixture(scope="module")
def foo():
return True
def test1(foo):
pass
def test2(foo):
pass

它将为每个xdist工作线程运行一次。

这不是您作为新用户所期望的,但解释是,每个xdist工作进程实际上都在运行一个完整的不同会话,每个会话中只有一个子集的测试用例。

一个pytest调用等于一个测试会话的错误假设今天也让我感到震惊,只是更糟,因为我有一个参数化的cpu和内存密集的模块范围的fixture(在许多不同的输入文件上作为子进程运行测试的二进制文件(,用于许多测试用例,所以它在每个工作程序的每个测试用例每个文件运行一次,并在几分钟内固定我的cpu,然后让我用完了交换。

我的解决方案是使用pytest-n auto-dist=loadscope,按顺序运行使用该特定夹具的所有测试,并且仍然并行地执行其他有用的工作。

从2018年起,本期文章中链接的一些用例有一些有用的解决方法:https://github.com/pytest-dev/pytest-xdist/issues/271

自2013年pytest回购协议以来,这一讨论本身要古老得多。他们最终表示,这不是他们的问题,因为在不使用xdist插件的情况下,会话可以正常工作:https://github.com/pytest-dev/pytest/issues/252

最新更新