有没有办法找出哪个pytest-xdist网关正在运行?

时间:2014-06-24 19:52:26

标签: pytest

我想为pytest-xdist生成的每个子进程/网关创建一个单独的日志文件。有没有一种优雅的方法来查找当前在哪个子进程/网关pytest?我正在使用conftest.py中的会话范围夹具配置我的根记录器,如下所示:

@pytest.fixture(scope='session', autouse=True)
def setup_logging():
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)

    fh = logging.FileHandler('xdist.log')
    fh.setLevel(logging.INFO)

   formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
   fh.setFormatter(formatter)

   logger.addHandler(fh)

如果我可以根据网关号在日志文件名中添加前缀,那就太棒了,例如:

 fh = logging.FileHandler('xdist_gateway_%s.log' % gateway_number)

如果没有这个,每个网关将使用相同的日志,日志将变得混乱。我知道我可以在文件名中添加时间戳。但这不允许我快速区分哪个文件来自哪个网关。

2 个答案:

答案 0 :(得分:2)

我发现您可以通过以下方式访问网关ID:

slaveinput = getattr(session.config, "slaveinput", None)

if slaveinput:
    gatewayid = slaveinput['slaveid']

当然,您需要位于可以访问session.config对象的位置。

答案 1 :(得分:1)

@Kanguros's answer类似,但插入pytest fixture范例:

  

您可以通过[访问] slaveinput字典获取工作者ID。这是一个夹具,可以将这些信息提供给测试和其他装置:

@pytest.fixture
def worker_id(request):
    if hasattr(request.config, 'slaveinput'):
        return request.config.slaveinput['slaveid']
    else:
        return 'master'

引自a comment on the pytest-xdist Issues tracker/discussion(2016)。