pytest中有没有办法从固定装置中获取参数化测试节点ID的列表?

时间:2019-04-09 22:02:47

标签: python pytest

我正在尝试写一种变通办法,以解决pytest / xdist无法串行运行某些测试,而不是并行运行所有测试的问题。

为了执行我想做的事情,我需要获取所有已收集的参数化测试的列表(因此它们看起来像path/to/test_module_name.py::TestClassName::test_method_name[parameterization info])。我正在尝试在会话范围内的固定装置中执行此操作,但是无法确定此信息的存储位置。有没有办法做到这一点?

我曾注意到,当用--cache-show调用pytest时,“ cache / nodeids”已填充了我所需的确切节点ID信息,但我似乎无法弄清楚何时这样做/不会发生,因为不一致。

1 个答案:

答案 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