Expose `log_cli` as a CLI parser option.

This commit is contained in:
Pedro Algarvio 2018-02-05 18:07:40 +00:00
parent ce0a9aadec
commit 0b71255dda
No known key found for this signature in database
GPG Key ID: BB36BF6584A298FF
3 changed files with 52 additions and 2 deletions

View File

@ -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')

1
changelog/3190.feature Normal file
View File

@ -0,0 +1 @@
Passing `--log-cli-level` in the command-line now automatically activates live logging.

View File

@ -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('''