2

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

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

那个设置是这样的

@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 的工作方式吗?设置是按线程执行的吗?是否有任何范围可以确保我在每个线程开始运行测试之前设置只执行一次?

4

2 回答 2

2

这是 xdist 的工作方式吗?设置是按线程执行的吗?

是的。在单个进程中完全支持会话范围的固定装置(不使用 xdist 时一个全局固定装置,否则每个 xdist 工作人员一个固定装置)

不幸的是,pytest 不支持在 xdist 工作人员之间共享固定装置。这是针对相同问题报告的问题。

于 2018-04-24T07:20:37.483 回答
1

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

于 2019-12-19T01:15:08.777 回答