关于python:Pytest xdist和参数化测试是否在每个线程中执行设置?

Pytest xdist and parametrized tests is performing setup per each thread?

我有一个用pytest运行的测试文件

该文件具有参数化测试,还有一个设置,我希望它在运行任何测试之前只运行一次,在该设置上,我执行无法并行执行的操作(写入文本文件)。

该设置是这样的

1
2
3
@pytest.fixture(scope="session", autouse=True)
def before_all_tests(request):
# Code that I want to run only once before all tests start to run

当我不带-n参数运行时,一切正常

当我使用-n运行时,我了解到的问题是因为两个线程同时进行设置

这是xdist的工作方式吗? 设置是按线程执行的吗? 是否有任何范围可以确保我的设置仅在每个线程开始运行测试之前执行一次?


Is this the way xdist works ? The setup is doing per thread ?

是。 在一个过程中完全支持Sesion范围的灯具(不使用xdist时,一个全局灯具,否则每个xdist工人一个灯具)

不幸的是,pytest不支持在xdist worker之间共享夹具。 这是相同问题的报告。


https://github.com/pytest-dev/pytest-xdist#making-session-scoped-fixtures-execute-only-once建议将共享资源写入文件并对其进行锁定,以防止重新执行 码。