6

我想为 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)

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

4

2 回答 2

3

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

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

if slaveinput:
    gatewayid = slaveinput['slaveid']

当然,您需要在可以访问 session.config 对象的地方。

于 2014-07-04T11:35:57.823 回答
3

类似于@Kanguros 的答案,但插入了 pytest 夹具范例:

您可以通过 [访问] slaveinput 字典来获取工作人员 ID。这是一个夹具,它使该信息可用于测试和其他夹具:

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

这是从对 pytest-xdist 问题跟踪器/讨论(2016)的评论中引用的。

于 2018-05-24T18:50:45.337 回答