diff --git a/frappe/commands/testing.py b/frappe/commands/testing.py index 2502546821..d487c01242 100644 --- a/frappe/commands/testing.py +++ b/frappe/commands/testing.py @@ -115,6 +115,7 @@ def main( verbosity=2 if testing_module_logger.getEffectiveLevel() < logging.INFO else 1, tb_locals=testing_module_logger.getEffectiveLevel() <= logging.INFO, cfg=test_config, + buffer=not bool(pdb_on_exceptions), ) if doctype or doctype_list_path: diff --git a/frappe/testing/result.py b/frappe/testing/result.py index 5c41dc5a1b..4aca1892a6 100644 --- a/frappe/testing/result.py +++ b/frappe/testing/result.py @@ -34,6 +34,12 @@ class TestResult(unittest.TextTestResult): self._old_stdout = [] self._old_stderr = [] + def _setupStdout(self): + pass + + def _restoreStdout(self): + pass + def startTestRun(self): if not sys.warnoptions: import warnings @@ -44,16 +50,18 @@ class TestResult(unittest.TextTestResult): warnings.filterwarnings("module", category=FrappeDeprecationWarning) # capture class & module setup & teardown in order to show it above the first test of the class - self._old_stderr.append(sys.stderr) - self._old_stdout.append(sys.stdout) - self._module_or_class_stdout_capture = io.StringIO() - self._module_or_class_stderr_capture = io.StringIO() - sys.stdout = self._module_or_class_stdout_capture - sys.stderr = self._module_or_class_stderr_capture + if self.buffer: + self._old_stderr.append(sys.stderr) + self._old_stdout.append(sys.stdout) + self._module_or_class_stdout_capture = io.StringIO() + self._module_or_class_stderr_capture = io.StringIO() + sys.stdout = self._module_or_class_stdout_capture + sys.stderr = self._module_or_class_stderr_capture def stopTestRun(self): - sys.stdout = self._old_stdout.pop() - sys.stderr = self._old_stderr.pop() + if self.buffer: + sys.stdout = self._old_stdout.pop() + sys.stderr = self._old_stderr.pop() def startTest(self, test): self.tb_locals = True @@ -87,23 +95,25 @@ class TestResult(unittest.TextTestResult): logger.info(f"records created: {', '.join(records)}") self.stream.flush() - self._old_stderr.append(sys.stderr) - self._old_stdout.append(sys.stdout) - self._test_stdout_capture = io.StringIO() - self._test_stderr_capture = io.StringIO() - sys.stdout = self._test_stdout_capture - sys.stderr = self._test_stderr_capture + if self.buffer: + self._old_stderr.append(sys.stderr) + self._old_stdout.append(sys.stdout) + self._test_stdout_capture = io.StringIO() + self._test_stderr_capture = io.StringIO() + sys.stdout = self._test_stdout_capture + sys.stderr = self._test_stderr_capture def stopTest(self, test): super().stopTest(test) - sys.stdout = self._old_stderr.pop() - sys.stderr = self._old_stdout.pop() - for line in self._test_stdout_capture.getvalue().splitlines(): - self.stream.write(f" ▹ {line}\n") - self.stream.flush() - for line in self._test_stderr_capture.getvalue().splitlines(): - self.stream.write(f" ▸ {line}\n") - self.stream.flush() + if self.buffer: + sys.stdout = self._old_stderr.pop() + sys.stderr = self._old_stdout.pop() + for line in self._test_stdout_capture.getvalue().splitlines(): + self.stream.write(f" ▹ {line}\n") + self.stream.flush() + for line in self._test_stderr_capture.getvalue().splitlines(): + self.stream.write(f" ▸ {line}\n") + self.stream.flush() def getTestMethodName(self, test): return test._testMethodName if hasattr(test, "_testMethodName") else str(test) diff --git a/frappe/testing/runner.py b/frappe/testing/runner.py index 0b839abfb6..0f73c6d701 100644 --- a/frappe/testing/runner.py +++ b/frappe/testing/runner.py @@ -52,7 +52,7 @@ class TestRunner(unittest.TextTestRunner): descriptions=True, verbosity=1, failfast=False, - buffer=False, + buffer=True, resultclass=None, warnings="module", *,