我正在尝试写一种变通办法,以解决pytest / xdist无法串行运行某些测试,而不是并行运行所有测试的问题。
为了执行我想做的事情,我需要获取所有已收集的参数化测试的列表(因此它们看起来像path/to/test_module_name.py::TestClassName::test_method_name[parameterization info]
)。我正在尝试在会话范围内的固定装置中执行此操作,但是无法确定此信息的存储位置。有没有办法做到这一点?
我曾注意到,当用--cache-show
调用pytest时,“ cache / nodeids”已填充了我所需的确切节点ID信息,但我似乎无法弄清楚何时这样做/不会发生,因为不一致。
答案 0 :(得分:0)
虽然我找不到确切的信息,但是可以使用以下两个解决方案来解决使用xdist插件时序列化测试的问题:
@pytest.fixture(scope='session')
def lock():
lock_file = pathlib.Path('serial.lock')
yield filelock.FileLock(lock_file=str(lock_file))
with contextlib.suppress(OSError):
os.remove(path=lock_file)
@pytest.fixture() # Add this fixture to each test that needs to be serialized
def serial(lock):
with lock.acquire(poll_intervall=0.1):
yield