pytest在与xdist并行运行之前预先配置

时间:2016-03-21 20:51:40

标签: pytest xdist

我刚开始将pytest与xdist结合使用来并行运行测试。我的contest.py我有一个配置挂钩来创建一些测试数据目录(带有时间戳)和我测试运行所需的文件。一切正常,直到我使用xdist。看起来pytest_configure首先执行,然后再次为每个进程执行,导致:

INTERNALERROR> OSError: [Errno 17] File exists: '/path/to/file'

我最终得到了n + 1个目录(几秒钟之后)。 有没有办法在分发之前预先配置测试运行?

编辑: 我可能找到了解决问题here的方法。我仍然需要测试它。

1 个答案:

答案 0 :(得分:3)

是的,这解决了我的问题。我添加了link示例代码,我是如何实现它的。它使用fixture来向slaveinput dict注入数据,该数据仅由pytest_configure中的主进程写入。

def pytest_configure(config):        
    if is_master(config):
        config.shared_directory = os.makedirs('/tests/runs/')  

def pytest_configure_node(self, node):
    """xdist hook"""
    node.slaveinput['shared_dir'] = node.config.shared_directory

@pytest.fixture
def shared_directory(request):
    if is_master(request.config):
        return request.config.shared_directory
    else:
        return request.config.slaveinput['shared_dir']

def is_master(config):
    """True if the code running the given pytest.config object is running in a xdist master
    node or not running xdist at all.
    """
    return not hasattr(config, 'slaveinput')