pytest: AttributeError: catch_log_handler
So I have this mind boggling issue for a test like this:
test_bug.py:
import logging
import pytest
def test_skip():
    logging.info('blabla')
    pytest.skip('muahaha')
conftest.py:
from __future__ import print_function
import pytest
@pytest.mark.hookwrapper
def pytest_runtest_call(item):
    if hasattr(item, 'funcargs'):
        for _ in item.funcargs.items():
            pass # i'd pull some data from fixtures here
    result = yield
    try:
        result.get_result()
    except Exception:
        capman = item.config.pluginmanager.getplugin("capturemanager")
        if capman:
            capman.resume_global_capture()
        print("""#####
##### DEBUG STUFF WHEN TEST FAILS
#####
""" % filename, file=sys.stderr)
        if capman:
            capman.suspend_capture_item(item, "setup")
tox.ini:
[tox]
envlist = py27
skipsdist = true
[testenv]
commands =
    pytest test_bug.py {posargs:}
deps =
    pytest==3.3.2
    pytest-splinter==1.8.5
    pytest-xvfb==1.0.0
    pytest-xdist==1.21.0
[pytest]
norecursedirs =
    .git
    .tox
    .ve
python_files =
    test_*.py
    *_test.py
    tests.py
addopts =
    -rxEfsw
    --strict
    --doctest-modules
    --doctest-glob=\*.rst
    --tb=native
    --max-slave-restart=5
xvfb_xauth = false
Sometimes it pass and I get this:
platform linux2 -- Python 2.7.12, pytest-3.3.2, py-1.5.2, pluggy-0.6.0 -- /home/ionel/sandbox/.tox/py27/bin/python2.7
cachedir: .cache
rootdir: /home/ionel/sandbox, inifile: tox.ini
plugins: xvfb-1.0.0, xdist-1.21.0, splinter-1.8.5, forked-0.2
collected 1 item
test_bug.py::test_skip SKIPPED                                                                                                                                       [100%]
========================================================================= short test summary info ==========================================================================
SKIP [1] /home/ionel/sandbox/test_bug.py:9: muahaha
======================================================================== 1 skipped in 0.02 seconds =========================================================================
Exception AttributeError: AttributeError('catch_log_handler',) in <generator object pytest_runtest_call at 0x7f7efb1130a0> ignored
_________________________________________________________________________________ summary __________________________________________________________________________________
  py27: commands succeeded
  congratulations :)
And sometimes it fails:
platform linux2 -- Python 2.7.12, pytest-3.3.2, py-1.5.2, pluggy-0.6.0 -- /home/ionel/sandbox/.tox/py27/bin/python2.7
cachedir: .cache
rootdir: /home/ionel/sandbox, inifile: tox.ini
plugins: xvfb-1.0.0, xdist-1.21.0, splinter-1.8.5, forked-0.2
collected 1 item
test_bug.py::test_skip SKIPPED                                                                                                                                       [100%]
test_bug.py::test_skip ERROR                                                                                                                                         [200%]
========================================================================= short test summary info ==========================================================================
ERROR test_bug.py::test_skip
SKIP [1] /home/ionel/sandbox/test_bug.py:9: muahaha
================================================================================== ERRORS ==================================================================================
______________________________________________________________________ ERROR at teardown of test_skip ______________________________________________________________________
Traceback (most recent call last):
  File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
    self.gen.next()
  File "/home/ionel/sandbox/.tox/py27/local/lib/python2.7/site-packages/_pytest/logging.py", line 294, in _runtest_for
    del item.catch_log_handler
AttributeError: catch_log_handler
==================================================================== 1 skipped, 1 error in 0.02 seconds ====================================================================
ERROR: InvocationError: '/home/ionel/sandbox/.tox/py27/bin/pytest test_bug.py -vv'
_________________________________________________________________________________ summary __________________________________________________________________________________
ERROR:   py27: commands failed
Removing my weird helper from conftest makes the problem go away but I need it.
Also, if I remove some of those pytest plugins it doesn’t error so often.
Any clue what’s going on here?
About this issue
- Original URL
 - State: closed
 - Created 6 years ago
 - Comments: 15 (13 by maintainers)
 
Commits related to this issue
- logging: del item.catch_log_handler only in teardown Without this caplog.record_tuples etc is not available when using `pdb.set_trace()` in a test. Fixes https://github.com/pytest-dev/pytest/issues/... — committed to blueyed/pytest by blueyed 6 years ago
 - logging: del item.catch_log_handler only in teardown Without this caplog.record_tuples etc is not available when using `pdb.set_trace()` in a test. Ref: https://github.com/pytest-dev/pytest/issues/3... — committed to blueyed/pytest by blueyed 6 years ago
 
At least in my case the culprit was that a
-p no:loggingwas left from some previous testing and that was the cause of the error, so totally my fault, sorry for the confusion. The only thing I might suggest is to catch this and give the user a more nicer error message ifcaplogis used whenloggingis disabled.