Expose `log_cli` as a CLI parser option.
This commit is contained in:
parent
ce0a9aadec
commit
0b71255dda
|
@ -336,9 +336,10 @@ class LoggingPlugin(object):
|
|||
create a single one for the entire test session here.
|
||||
"""
|
||||
self._config = config
|
||||
self._stream_logs = None
|
||||
|
||||
# enable verbose output automatically if live logging is enabled
|
||||
if self._config.getini('log_cli') and not config.getoption('verbose'):
|
||||
if self._stream_logs_enabled() and not config.getoption('verbose'):
|
||||
# sanity check: terminal reporter should not have been loaded at this point
|
||||
assert self._config.pluginmanager.get_plugin('terminalreporter') is None
|
||||
config.option.verbose = 1
|
||||
|
@ -364,6 +365,12 @@ class LoggingPlugin(object):
|
|||
# initialized during pytest_runtestloop
|
||||
self.log_cli_handler = None
|
||||
|
||||
def _stream_logs_enabled(self):
|
||||
if self._stream_logs is None:
|
||||
self._stream_logs = self._config.getoption('--log-cli-level') is not None or \
|
||||
self._config.getini('log_cli')
|
||||
return self._stream_logs
|
||||
|
||||
@contextmanager
|
||||
def _runtest_for(self, item, when):
|
||||
"""Implements the internals of pytest_runtest_xxx() hook."""
|
||||
|
@ -438,7 +445,7 @@ class LoggingPlugin(object):
|
|||
This must be done right before starting the loop so we can access the terminal reporter plugin.
|
||||
"""
|
||||
terminal_reporter = self._config.pluginmanager.get_plugin('terminalreporter')
|
||||
if self._config.getini('log_cli') and terminal_reporter is not None:
|
||||
if self._stream_logs_enabled() and terminal_reporter is not None:
|
||||
capture_manager = self._config.pluginmanager.get_plugin('capturemanager')
|
||||
log_cli_handler = _LiveLoggingStreamHandler(terminal_reporter, capture_manager)
|
||||
log_cli_format = get_option_ini(self._config, 'log_cli_format', 'log_format')
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Passing `--log-cli-level` in the command-line now automatically activates live logging.
|
|
@ -366,6 +366,48 @@ def test_log_cli_ini_level(testdir):
|
|||
assert result.ret == 0
|
||||
|
||||
|
||||
@pytest.mark.parametrize('cli_args', ['',
|
||||
'--log-level=WARNING',
|
||||
'--log-file-level=WARNING',
|
||||
'--log-cli-level=WARNING'])
|
||||
def test_log_cli_auto_enable(testdir, request, cli_args):
|
||||
"""Check that live logs are enabled if --log-level or --log-cli-level is passed on the CLI.
|
||||
It should not be auto enabled if the same configs are set on the INI file.
|
||||
"""
|
||||
testdir.makepyfile('''
|
||||
import pytest
|
||||
import logging
|
||||
|
||||
def test_log_1():
|
||||
logging.info("log message from test_log_1 not to be shown")
|
||||
logging.warning("log message from test_log_1")
|
||||
|
||||
''')
|
||||
testdir.makeini('''
|
||||
[pytest]
|
||||
log_level=INFO
|
||||
log_cli_level=INFO
|
||||
''')
|
||||
|
||||
result = testdir.runpytest(cli_args)
|
||||
if cli_args == '--log-cli-level=WARNING':
|
||||
result.stdout.fnmatch_lines([
|
||||
'*::test_log_1 ',
|
||||
'*-- live log call --*',
|
||||
'*WARNING*log message from test_log_1*',
|
||||
'PASSED *100%*',
|
||||
'=* 1 passed in *=',
|
||||
])
|
||||
assert 'INFO' not in result.stdout.str()
|
||||
else:
|
||||
result.stdout.fnmatch_lines([
|
||||
'*test_log_cli_auto_enable*100%*',
|
||||
'=* 1 passed in *=',
|
||||
])
|
||||
assert 'INFO' not in result.stdout.str()
|
||||
assert 'WARNING' not in result.stdout.str()
|
||||
|
||||
|
||||
def test_log_file_cli(testdir):
|
||||
# Default log file level
|
||||
testdir.makepyfile('''
|
||||
|
|
Loading…
Reference in New Issue