Revert "Fix teardown error reporting when `--maxfail=1` (#11721)"
Fix #12021.
Reopens #11706.
This reverts commit 12b9bd5801
.
This change caused a bad regression in pytest-xdist:
https://github.com/pytest-dev/pytest-xdist/issues/1024
pytest-xdist necessarily has special handling of `--maxfail` and session
fixture teardown get executed multiple times with the change.
Since I'm not sure how to adapt pytest-xdist myself, revert for now.
I kept the sticky `shouldstop`/`shouldfail` changes as they are good
ideas regardless I think.
This commit is contained in:
parent
691d8fcafb
commit
00d9640abc
|
@ -0,0 +1 @@
|
||||||
|
Reverted a fix to `--maxfail` handling in pytest 8.0.0 because it caused a regression in pytest-xdist whereby session fixture teardowns may get executed multiple times when the max-fails is reached.
|
|
@ -85,6 +85,8 @@ Bug Fixes
|
||||||
|
|
||||||
- `#11706 <https://github.com/pytest-dev/pytest/issues/11706>`_: Fix reporting of teardown errors in higher-scoped fixtures when using `--maxfail` or `--stepwise`.
|
- `#11706 <https://github.com/pytest-dev/pytest/issues/11706>`_: Fix reporting of teardown errors in higher-scoped fixtures when using `--maxfail` or `--stepwise`.
|
||||||
|
|
||||||
|
NOTE: This change was reverted in pytest 8.0.2 to fix a `regression <https://github.com/pytest-dev/pytest-xdist/issues/1024>`_ it caused in pytest-xdist.
|
||||||
|
|
||||||
|
|
||||||
- `#11758 <https://github.com/pytest-dev/pytest/issues/11758>`_: Fixed ``IndexError: string index out of range`` crash in ``if highlighted[-1] == "\n" and source[-1] != "\n"``.
|
- `#11758 <https://github.com/pytest-dev/pytest/issues/11758>`_: Fixed ``IndexError: string index out of range`` crash in ``if highlighted[-1] == "\n" and source[-1] != "\n"``.
|
||||||
This bug was introduced in pytest 8.0.0rc1.
|
This bug was introduced in pytest 8.0.0rc1.
|
||||||
|
|
|
@ -132,10 +132,6 @@ def runtestprotocol(
|
||||||
show_test_item(item)
|
show_test_item(item)
|
||||||
if not item.config.getoption("setuponly", False):
|
if not item.config.getoption("setuponly", False):
|
||||||
reports.append(call_and_report(item, "call", log))
|
reports.append(call_and_report(item, "call", log))
|
||||||
# If the session is about to fail or stop, teardown everything - this is
|
|
||||||
# necessary to correctly report fixture teardown errors (see #11706)
|
|
||||||
if item.session.shouldfail or item.session.shouldstop:
|
|
||||||
nextitem = None
|
|
||||||
reports.append(call_and_report(item, "teardown", log, nextitem=nextitem))
|
reports.append(call_and_report(item, "teardown", log, nextitem=nextitem))
|
||||||
# After all teardown hooks have been called
|
# After all teardown hooks have been called
|
||||||
# want funcargs and request info to go away.
|
# want funcargs and request info to go away.
|
||||||
|
|
|
@ -1089,53 +1089,3 @@ def test_outcome_exception_bad_msg() -> None:
|
||||||
with pytest.raises(TypeError) as excinfo:
|
with pytest.raises(TypeError) as excinfo:
|
||||||
OutcomeException(func) # type: ignore
|
OutcomeException(func) # type: ignore
|
||||||
assert str(excinfo.value) == expected
|
assert str(excinfo.value) == expected
|
||||||
|
|
||||||
|
|
||||||
def test_teardown_session_failed(pytester: Pytester) -> None:
|
|
||||||
"""Test that higher-scoped fixture teardowns run in the context of the last
|
|
||||||
item after the test session bails early due to --maxfail.
|
|
||||||
|
|
||||||
Regression test for #11706.
|
|
||||||
"""
|
|
||||||
pytester.makepyfile(
|
|
||||||
"""
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def baz():
|
|
||||||
yield
|
|
||||||
pytest.fail("This is a failing teardown")
|
|
||||||
|
|
||||||
def test_foo(baz):
|
|
||||||
pytest.fail("This is a failing test")
|
|
||||||
|
|
||||||
def test_bar(): pass
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
result = pytester.runpytest("--maxfail=1")
|
|
||||||
result.assert_outcomes(failed=1, errors=1)
|
|
||||||
|
|
||||||
|
|
||||||
def test_teardown_session_stopped(pytester: Pytester) -> None:
|
|
||||||
"""Test that higher-scoped fixture teardowns run in the context of the last
|
|
||||||
item after the test session bails early due to --stepwise.
|
|
||||||
|
|
||||||
Regression test for #11706.
|
|
||||||
"""
|
|
||||||
pytester.makepyfile(
|
|
||||||
"""
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def baz():
|
|
||||||
yield
|
|
||||||
pytest.fail("This is a failing teardown")
|
|
||||||
|
|
||||||
def test_foo(baz):
|
|
||||||
pytest.fail("This is a failing test")
|
|
||||||
|
|
||||||
def test_bar(): pass
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
result = pytester.runpytest("--stepwise")
|
|
||||||
result.assert_outcomes(failed=1, errors=1)
|
|
||||||
|
|
Loading…
Reference in New Issue