Terminate the test loop if shouldfail or shouldstop is set (#1026)
This commit is contained in:
@@ -182,9 +182,17 @@ class DSession:
|
||||
self.shouldstop = f"{node} received keyboard-interrupt"
|
||||
self.worker_errordown(node, "keyboard-interrupt")
|
||||
return
|
||||
if node in self.sched.nodes:
|
||||
crashitem = self.sched.remove_node(node)
|
||||
assert not crashitem, (crashitem, node)
|
||||
shouldfail = node.workeroutput["shouldfail"]
|
||||
shouldstop = node.workeroutput["shouldstop"]
|
||||
for shouldx in [shouldfail, shouldstop]:
|
||||
if shouldx:
|
||||
if not self.shouldstop:
|
||||
self.shouldstop = shouldx
|
||||
break
|
||||
else:
|
||||
if node in self.sched.nodes:
|
||||
crashitem = self.sched.remove_node(node)
|
||||
assert not crashitem, (crashitem, node)
|
||||
self._active_nodes.remove(node)
|
||||
|
||||
def worker_internal_error(self, node, formatted_error):
|
||||
|
||||
@@ -103,6 +103,8 @@ class WorkerInteractor:
|
||||
def pytest_sessionfinish(self, exitstatus):
|
||||
# in pytest 5.0+, exitstatus is an IntEnum object
|
||||
self.config.workeroutput["exitstatus"] = int(exitstatus)
|
||||
self.config.workeroutput["shouldfail"] = self.session.shouldfail
|
||||
self.config.workeroutput["shouldstop"] = self.session.shouldstop
|
||||
yield
|
||||
self.sendevent("workerfinished", workeroutput=self.config.workeroutput)
|
||||
|
||||
@@ -155,6 +157,8 @@ class WorkerInteractor:
|
||||
self.nextitem_index = self._get_next_item_index()
|
||||
while self.nextitem_index is not self.SHUTDOWN_MARK:
|
||||
self.run_one_test()
|
||||
if session.shouldfail or session.shouldstop:
|
||||
break
|
||||
return True
|
||||
|
||||
def run_one_test(self):
|
||||
|
||||
Reference in New Issue
Block a user