Merge pull request #3189 from s0undt3ch/feature/logstart-logfinish
Additionally handle logstart and logfinish hooks
This commit is contained in:
commit
ed12cf3fb3
1
AUTHORS
1
AUTHORS
|
@ -148,6 +148,7 @@ Omar Kohl
|
|||
Omer Hadari
|
||||
Patrick Hayes
|
||||
Paweł Adamczak
|
||||
Pedro Algarvio
|
||||
Pieter Mulder
|
||||
Piotr Banaszkiewicz
|
||||
Punyashloka Biswal
|
||||
|
|
|
@ -371,6 +371,11 @@ class LoggingPlugin(object):
|
|||
formatter=self.formatter, level=self.log_level) as log_handler:
|
||||
if self.log_cli_handler:
|
||||
self.log_cli_handler.set_when(when)
|
||||
|
||||
if item is None:
|
||||
yield # run the test
|
||||
return
|
||||
|
||||
if not hasattr(item, 'catch_log_handlers'):
|
||||
item.catch_log_handlers = {}
|
||||
item.catch_log_handlers[when] = log_handler
|
||||
|
@ -402,9 +407,17 @@ class LoggingPlugin(object):
|
|||
with self._runtest_for(item, 'teardown'):
|
||||
yield
|
||||
|
||||
@pytest.hookimpl(hookwrapper=True)
|
||||
def pytest_runtest_logstart(self):
|
||||
if self.log_cli_handler:
|
||||
self.log_cli_handler.reset()
|
||||
with self._runtest_for(None, 'start'):
|
||||
yield
|
||||
|
||||
@pytest.hookimpl(hookwrapper=True)
|
||||
def pytest_runtest_logfinish(self):
|
||||
with self._runtest_for(None, 'finish'):
|
||||
yield
|
||||
|
||||
@pytest.hookimpl(hookwrapper=True)
|
||||
def pytest_runtestloop(self, session):
|
||||
|
@ -474,7 +487,7 @@ class _LiveLoggingStreamHandler(logging.StreamHandler):
|
|||
if self.capture_manager is not None:
|
||||
self.capture_manager.suspend_global_capture()
|
||||
try:
|
||||
if not self._first_record_emitted or self._when == 'teardown':
|
||||
if not self._first_record_emitted or self._when in ('teardown', 'finish'):
|
||||
self.stream.write('\n')
|
||||
self._first_record_emitted = True
|
||||
if not self._section_name_shown:
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Allow the logging plugin to handle ``pytest_runtest_logstart`` and ``pytest_runtest_logfinish`` hooks when live logs are enabled.
|
|
@ -161,6 +161,7 @@ def test_log_cli_enabled_disabled(testdir, enabled):
|
|||
if enabled:
|
||||
result.stdout.fnmatch_lines([
|
||||
'test_log_cli_enabled_disabled.py::test_log_cli ',
|
||||
'*-- live log call --*',
|
||||
'test_log_cli_enabled_disabled.py* CRITICAL critical message logged by test',
|
||||
'PASSED*',
|
||||
])
|
||||
|
@ -226,8 +227,20 @@ def test_log_cli_default_level_multiple_tests(testdir, request):
|
|||
|
||||
|
||||
def test_log_cli_default_level_sections(testdir, request):
|
||||
"""Check that with live logging enable we are printing the correct headers during setup/call/teardown."""
|
||||
"""Check that with live logging enable we are printing the correct headers during
|
||||
start/setup/call/teardown/finish."""
|
||||
filename = request.node.name + '.py'
|
||||
testdir.makeconftest('''
|
||||
import pytest
|
||||
import logging
|
||||
|
||||
def pytest_runtest_logstart():
|
||||
logging.warning('>>>>> START >>>>>')
|
||||
|
||||
def pytest_runtest_logfinish():
|
||||
logging.warning('<<<<< END <<<<<<<')
|
||||
''')
|
||||
|
||||
testdir.makepyfile('''
|
||||
import pytest
|
||||
import logging
|
||||
|
@ -252,6 +265,8 @@ def test_log_cli_default_level_sections(testdir, request):
|
|||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines([
|
||||
'{}::test_log_1 '.format(filename),
|
||||
'*-- live log start --*',
|
||||
'*WARNING* >>>>> START >>>>>*',
|
||||
'*-- live log setup --*',
|
||||
'*WARNING*log message from setup of test_log_1*',
|
||||
'*-- live log call --*',
|
||||
|
@ -259,8 +274,12 @@ def test_log_cli_default_level_sections(testdir, request):
|
|||
'PASSED *50%*',
|
||||
'*-- live log teardown --*',
|
||||
'*WARNING*log message from teardown of test_log_1*',
|
||||
'*-- live log finish --*',
|
||||
'*WARNING* <<<<< END <<<<<<<*',
|
||||
|
||||
'{}::test_log_2 '.format(filename),
|
||||
'*-- live log start --*',
|
||||
'*WARNING* >>>>> START >>>>>*',
|
||||
'*-- live log setup --*',
|
||||
'*WARNING*log message from setup of test_log_2*',
|
||||
'*-- live log call --*',
|
||||
|
@ -268,6 +287,8 @@ def test_log_cli_default_level_sections(testdir, request):
|
|||
'PASSED *100%*',
|
||||
'*-- live log teardown --*',
|
||||
'*WARNING*log message from teardown of test_log_2*',
|
||||
'*-- live log finish --*',
|
||||
'*WARNING* <<<<< END <<<<<<<*',
|
||||
'=* 2 passed in *=',
|
||||
])
|
||||
|
||||
|
|
Loading…
Reference in New Issue