Skip to content

Commit

Permalink
Merge pull request #5454 from nicoddemus/backport-5446
Browse files Browse the repository at this point in the history
Backport 5446
  • Loading branch information
nicoddemus committed Jun 17, 2019
2 parents c765b83 + 4e02248 commit 4b104ba
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 18 deletions.
1 change: 1 addition & 0 deletions changelog/5444.bugfix.rst
@@ -0,0 +1 @@
Fix ``--stepwise`` mode when the first file passed on the command-line fails to collect.
9 changes: 2 additions & 7 deletions src/_pytest/stepwise.py
Expand Up @@ -29,6 +29,7 @@ def __init__(self, config):
self.config = config
self.active = config.getvalue("stepwise")
self.session = None
self.report_status = ""

if self.active:
self.lastfailed = config.cache.get("cache/stepwise", None)
Expand Down Expand Up @@ -70,12 +71,6 @@ def pytest_collection_modifyitems(self, session, config, items):

config.hook.pytest_deselected(items=already_passed)

def pytest_collectreport(self, report):
if self.active and report.failed:
self.session.shouldstop = (
"Error when collecting test, stopping test execution."
)

def pytest_runtest_logreport(self, report):
# Skip this hook if plugin is not active or the test is xfailed.
if not self.active or "xfail" in report.keywords:
Expand Down Expand Up @@ -104,7 +99,7 @@ def pytest_runtest_logreport(self, report):
self.lastfailed = None

def pytest_report_collectionfinish(self):
if self.active and self.config.getoption("verbose") >= 0:
if self.active and self.config.getoption("verbose") >= 0 and self.report_status:
return "stepwise: %s" % self.report_status

def pytest_sessionfinish(self, session):
Expand Down
20 changes: 9 additions & 11 deletions testing/test_stepwise.py
Expand Up @@ -157,14 +157,12 @@ def test_change_testfile(stepwise_testdir):
assert "test_success PASSED" in stdout


def test_stop_on_collection_errors(broken_testdir):
result = broken_testdir.runpytest(
"-v",
"--strict-markers",
"--stepwise",
"working_testfile.py",
"broken_testfile.py",
)

stdout = result.stdout.str()
assert "errors during collection" in stdout
@pytest.mark.parametrize("broken_first", [True, False])
def test_stop_on_collection_errors(broken_testdir, broken_first):
"""Stop during collection errors. Broken test first or broken test last
actually surfaced a bug (#5444), so we test both situations."""
files = ["working_testfile.py", "broken_testfile.py"]
if broken_first:
files.reverse()
result = broken_testdir.runpytest("-v", "--strict-markers", "--stepwise", *files)
result.stdout.fnmatch_lines("*errors during collection*")

0 comments on commit 4b104ba

Please sign in to comment.