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