我想为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)
如果没有这个,每个网关将使用相同的日志,日志将变得混乱。我知道我可以在文件名中添加时间戳。但这不允许我快速区分哪个文件来自哪个网关。
答案 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)。