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.
|
create a single one for the entire test session here.
|
||||||
"""
|
"""
|
||||||
self._config = config
|
self._config = config
|
||||||
|
self._stream_logs = None
|
||||||
|
|
||||||
# enable verbose output automatically if live logging is enabled
|
# 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
|
# sanity check: terminal reporter should not have been loaded at this point
|
||||||
assert self._config.pluginmanager.get_plugin('terminalreporter') is None
|
assert self._config.pluginmanager.get_plugin('terminalreporter') is None
|
||||||
config.option.verbose = 1
|
config.option.verbose = 1
|
||||||
|
@ -364,6 +365,12 @@ class LoggingPlugin(object):
|
||||||
# initialized during pytest_runtestloop
|
# initialized during pytest_runtestloop
|
||||||
self.log_cli_handler = None
|
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
|
@contextmanager
|
||||||
def _runtest_for(self, item, when):
|
def _runtest_for(self, item, when):
|
||||||
"""Implements the internals of pytest_runtest_xxx() hook."""
|
"""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.
|
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')
|
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')
|
capture_manager = self._config.pluginmanager.get_plugin('capturemanager')
|
||||||
log_cli_handler = _LiveLoggingStreamHandler(terminal_reporter, capture_manager)
|
log_cli_handler = _LiveLoggingStreamHandler(terminal_reporter, capture_manager)
|
||||||
log_cli_format = get_option_ini(self._config, 'log_cli_format', 'log_format')
|
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
|
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):
|
def test_log_file_cli(testdir):
|
||||||
# Default log file level
|
# Default log file level
|
||||||
testdir.makepyfile('''
|
testdir.makepyfile('''
|
||||||
|
|
Loading…
Reference in New Issue