Skip to content

ExceptionGroup traceback of session fixture unlimitedly grows from test to test #12204

@tkukushkin

Description

@tkukushkin

My session fixture can raise ExceptionGroup and I see huge traceback which grows unlimitedly from test to test.

pip list:

iniconfig 2.0.0  
packaging 24.0   
pluggy    1.4.0  
pytest    8.1.1 

Operation system: macOS 14.3
Python: 3.12.0

Example:

import pytest

@pytest.fixture(scope='session', autouse=True)
def f1():
    raise ExceptionGroup('', [ValueError()])

def test_smth1():
    pass

def test_smth2():
    pass

def test_smth3():
    pass

With such code I get 495 lines of logs:

Details

============================= test session starts ==============================
platform darwin -- Python 3.12.0, pytest-8.0.0, pluggy-1.3.0
rootdir: /Users/tkukushkin/Projects/test/tests
configfile: pytest.ini
plugins: cov-4.1.0
collected 3 items

tests/test_foo.py EEE [100%]

==================================== ERRORS ====================================
_________________________ ERROR at setup of test_smth1 _________________________

  • Exception Group Traceback (most recent call last):
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 345, in from_call
    | result: Optional[TResult] = func()
    | ^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 266, in
    | lambda: ihook(item=item, **kwds), when=when, reraise=reraise
    | ^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 85, in pytest_runtest_setup
    | yield from unraisable_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 65, in unraisable_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 833, in pytest_runtest_setup
    | yield from self._runtest_for(item, "setup")
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 822, in _runtest_for
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/capture.py", line 877, in pytest_runtest_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 82, in pytest_runtest_setup
    | yield from thread_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 63, in thread_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 161, in pytest_runtest_setup
    | item.session._setupstate.setup(item)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 517, in setup
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 514, in setup
    | col.setup()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/python.py", line 1839, in setup
    | self._request._fillfixtures()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 693, in _fillfixtures
    | item.funcargs[argname] = self.getfixturevalue(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 547, in getfixturevalue
    | fixturedef = self._get_active_fixturedef(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 566, in _get_active_fixturedef
    | self._compute_fixture_value(fixturedef)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 652, in _compute_fixture_value
    | fixturedef.execute(request=subrequest)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1095, in execute
    | result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/setuponly.py", line 36, in pytest_fixture_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1149, in pytest_fixture_setup
    | result = call_fixture_func(fixturefunc, request, kwargs)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 923, in call_fixture_func
    | fixture_result = fixturefunc(**kwargs)
    | ^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/Projects/test/tests/test_foo.py", line 6, in f1
    | raise ExceptionGroup('', [ValueError('foo')])
    | ExceptionGroup: (1 sub-exception)
    +-+---------------- 1 ----------------
    | ValueError: foo
    +------------------------------------
    _________________________ ERROR at setup of test_smth2 _________________________
  • Exception Group Traceback (most recent call last):
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 345, in from_call
    | result: Optional[TResult] = func()
    | ^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 266, in
    | lambda: ihook(item=item, **kwds), when=when, reraise=reraise
    | ^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 85, in pytest_runtest_setup
    | yield from unraisable_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 65, in unraisable_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 833, in pytest_runtest_setup
    | yield from self._runtest_for(item, "setup")
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 822, in _runtest_for
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/capture.py", line 877, in pytest_runtest_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 82, in pytest_runtest_setup
    | yield from thread_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 63, in thread_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 161, in pytest_runtest_setup
    | item.session._setupstate.setup(item)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 517, in setup
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 514, in setup
    | col.setup()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/python.py", line 1839, in setup
    | self._request._fillfixtures()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 693, in _fillfixtures
    | item.funcargs[argname] = self.getfixturevalue(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 547, in getfixturevalue
    | fixturedef = self._get_active_fixturedef(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 566, in _get_active_fixturedef
    | self._compute_fixture_value(fixturedef)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 652, in _compute_fixture_value
    | fixturedef.execute(request=subrequest)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1085, in execute
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 345, in from_call
    | result: Optional[TResult] = func()
    | ^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 266, in
    | lambda: ihook(item=item, **kwds), when=when, reraise=reraise
    | ^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 85, in pytest_runtest_setup
    | yield from unraisable_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 65, in unraisable_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 833, in pytest_runtest_setup
    | yield from self._runtest_for(item, "setup")
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 822, in _runtest_for
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/capture.py", line 877, in pytest_runtest_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 82, in pytest_runtest_setup
    | yield from thread_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 63, in thread_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 161, in pytest_runtest_setup
    | item.session._setupstate.setup(item)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 517, in setup
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 514, in setup
    | col.setup()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/python.py", line 1839, in setup
    | self._request._fillfixtures()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 693, in _fillfixtures
    | item.funcargs[argname] = self.getfixturevalue(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 547, in getfixturevalue
    | fixturedef = self._get_active_fixturedef(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 566, in _get_active_fixturedef
    | self._compute_fixture_value(fixturedef)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 652, in _compute_fixture_value
    | fixturedef.execute(request=subrequest)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1095, in execute
    | result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/setuponly.py", line 36, in pytest_fixture_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1149, in pytest_fixture_setup
    | result = call_fixture_func(fixturefunc, request, kwargs)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 923, in call_fixture_func
    | fixture_result = fixturefunc(**kwargs)
    | ^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/Projects/test/tests/test_foo.py", line 6, in f1
    | raise ExceptionGroup('', [ValueError('foo')])
    | ExceptionGroup: (1 sub-exception)
    +-+---------------- 1 ----------------
    | ValueError: foo
    +------------------------------------
    _________________________ ERROR at setup of test_smth3 _________________________
  • Exception Group Traceback (most recent call last):
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 345, in from_call
    | result: Optional[TResult] = func()
    | ^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 266, in
    | lambda: ihook(item=item, **kwds), when=when, reraise=reraise
    | ^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 85, in pytest_runtest_setup
    | yield from unraisable_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 65, in unraisable_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 833, in pytest_runtest_setup
    | yield from self._runtest_for(item, "setup")
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 822, in _runtest_for
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/capture.py", line 877, in pytest_runtest_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 82, in pytest_runtest_setup
    | yield from thread_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 63, in thread_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 161, in pytest_runtest_setup
    | item.session._setupstate.setup(item)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 517, in setup
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 514, in setup
    | col.setup()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/python.py", line 1839, in setup
    | self._request._fillfixtures()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 693, in _fillfixtures
    | item.funcargs[argname] = self.getfixturevalue(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 547, in getfixturevalue
    | fixturedef = self._get_active_fixturedef(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 566, in _get_active_fixturedef
    | self._compute_fixture_value(fixturedef)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 652, in _compute_fixture_value
    | fixturedef.execute(request=subrequest)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1085, in execute
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 345, in from_call
    | result: Optional[TResult] = func()
    | ^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 266, in
    | lambda: ihook(item=item, **kwds), when=when, reraise=reraise
    | ^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 85, in pytest_runtest_setup
    | yield from unraisable_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 65, in unraisable_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 833, in pytest_runtest_setup
    | yield from self._runtest_for(item, "setup")
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 822, in _runtest_for
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/capture.py", line 877, in pytest_runtest_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 82, in pytest_runtest_setup
    | yield from thread_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 63, in thread_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 161, in pytest_runtest_setup
    | item.session._setupstate.setup(item)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 517, in setup
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 514, in setup
    | col.setup()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/python.py", line 1839, in setup
    | self._request._fillfixtures()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 693, in _fillfixtures
    | item.funcargs[argname] = self.getfixturevalue(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 547, in getfixturevalue
    | fixturedef = self._get_active_fixturedef(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 566, in _get_active_fixturedef
    | self._compute_fixture_value(fixturedef)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 652, in _compute_fixture_value
    | fixturedef.execute(request=subrequest)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1085, in execute
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 345, in from_call
    | result: Optional[TResult] = func()
    | ^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 266, in
    | lambda: ihook(item=item, **kwds), when=when, reraise=reraise
    | ^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 85, in pytest_runtest_setup
    | yield from unraisable_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/unraisableexception.py", line 65, in unraisable_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 833, in pytest_runtest_setup
    | yield from self._runtest_for(item, "setup")
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/logging.py", line 822, in _runtest_for
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/capture.py", line 877, in pytest_runtest_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 82, in pytest_runtest_setup
    | yield from thread_exception_runtest_hook()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/threadexception.py", line 63, in thread_exception_runtest_hook
    | yield
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 161, in pytest_runtest_setup
    | item.session._setupstate.setup(item)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 517, in setup
    | raise exc
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/runner.py", line 514, in setup
    | col.setup()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/python.py", line 1839, in setup
    | self._request._fillfixtures()
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 693, in _fillfixtures
    | item.funcargs[argname] = self.getfixturevalue(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 547, in getfixturevalue
    | fixturedef = self._get_active_fixturedef(argname)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 566, in _get_active_fixturedef
    | self._compute_fixture_value(fixturedef)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 652, in _compute_fixture_value
    | fixturedef.execute(request=subrequest)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1095, in execute
    | result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in call
    | return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
    | return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 113, in _multicall
    | raise exception.with_traceback(exception.traceback)
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 96, in _multicall
    | teardown.throw(exception) # type: ignore[union-attr]
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/setuponly.py", line 36, in pytest_fixture_setup
    | return (yield)
    | ^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
    | res = hook_impl.function(*args)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 1149, in pytest_fixture_setup
    | result = call_fixture_func(fixturefunc, request, kwargs)
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/.pyenv/versions/3.12.0/lib/python3.12/site-packages/_pytest/fixtures.py", line 923, in call_fixture_func
    | fixture_result = fixturefunc(**kwargs)
    | ^^^^^^^^^^^^^^^^^^^^^
    | File "/Users/tkukushkin/Projects/test/tests/test_foo.py", line 6, in f1
    | raise ExceptionGroup('', [ValueError('foo')])
    | ExceptionGroup: (1 sub-exception)
    +-+---------------- 1 ----------------
    | ValueError: foo
    +------------------------------------
    =========================== short test summary info ============================
    ERROR tests/test_foo.py::test_smth1 - ExceptionGroup: (1 sub-exception)
    ERROR tests/test_foo.py::test_smth2 - ExceptionGroup: (1 sub-exception)
    ERROR tests/test_foo.py::test_smth3 - ExceptionGroup: (1 sub-exception)
    ============================== 3 errors in 0.02s ===============================

Traceback of first test: 95 lines
Traceback of second test: 159 lines
Traceback of third test: 223 lines

In more complex example with several hundred of tests I got 2.7 GiB logs :-)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions