diff --git a/src/tests/conftest.py b/src/tests/conftest.py index 367091d44c..77acb14605 100644 --- a/src/tests/conftest.py +++ b/src/tests/conftest.py @@ -1,6 +1,8 @@ import pytest from xdist.dsession import DSession +CRASHED_ITEMS = set() + @pytest.mark.trylast def pytest_configure(config): @@ -11,18 +13,21 @@ def pytest_configure(config): """ def _handle_crashitem(self, nodeid, worker): + first = nodeid not in CRASHED_ITEMS runner = self.config.pluginmanager.getplugin("runner") fspath = nodeid.split("::")[0] msg = "Worker %r crashed while running %r" % (worker.gateway.id, nodeid) + CRASHED_ITEMS.add(nodeid) rep = runner.TestReport( - nodeid, (fspath, None, fspath), (), "failed", msg, "???" + nodeid, (fspath, None, fspath), (), "restarted" if first else "failed", msg, "???" ) rep.node = worker self.config.hook.pytest_runtest_logreport(report=rep) # Schedule retry - self.sched.pending.append(self.sched.collection.index(nodeid)) - for node in self.sched.node2pending: - self.sched.check_schedule(node) + if first: + self.sched.pending.append(self.sched.collection.index(nodeid)) + for node in self.sched.node2pending: + self.sched.check_schedule(node) DSession.handle_crashitem = _handle_crashitem