From b0627049628fa4cde344d1ef5015c3cc459e3c32 Mon Sep 17 00:00:00 2001 From: Ashley Unitt Date: Wed, 20 Jul 2022 16:51:38 +0100 Subject: [PATCH 1/2] Added support for startTestRun and stopTestRun --- xmlrunner/runner.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/xmlrunner/runner.py b/xmlrunner/runner.py index 6b6588b..c4c6d5d 100644 --- a/xmlrunner/runner.py +++ b/xmlrunner/runner.py @@ -64,7 +64,15 @@ def run(self, test): # Execute tests start_time = time.monotonic() - test(result) + startTestRun = getattr(result, 'startTestRun', None) + if startTestRun is not None: + startTestRun() + try: + test(result) + finally: + stopTestRun = getattr(result, 'stopTestRun', None) + if stopTestRun is not None: + stopTestRun() stop_time = time.monotonic() time_taken = stop_time - start_time From c4bc4ec2ec7d5f7ba45eadc795c7c50dd57f172e Mon Sep 17 00:00:00 2001 From: Ashley Unitt Date: Tue, 2 Aug 2022 15:24:52 +0100 Subject: [PATCH 2/2] Added test to make sure startTestRun and stopTestRun are being called --- tests/testsuite.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/testsuite.py b/tests/testsuite.py index 76db902..922cd52 100755 --- a/tests/testsuite.py +++ b/tests/testsuite.py @@ -318,6 +318,33 @@ def test_xmlrunner_non_ascii(self): u'message="demonstrating non-ascii skipping: éçà"'.encode('utf8'), output) + def test_start_and_stop_test(self): + def startTestRun(self): + self.stream.writeln('startTestRun called') + def stopTestRun(self): + self.stream.writeln('stopTestRun called') + + suite = unittest.TestSuite() + suite.addTest(self.DummyTest('test_pass')) + outdir = BytesIO() + runner = xmlrunner.XMLTestRunner( + stream=self.stream, output=outdir, verbosity=self.verbosity, + **self.runner_kwargs) + old_test_run_start = unittest.result.TestResult.startTestRun + old_test_run_stop = unittest.result.TestResult.stopTestRun + unittest.result.TestResult.startTestRun = startTestRun + unittest.result.TestResult.stopTestRun = stopTestRun + try: + runner.run(suite) + outdir.seek(0) + output = outdir.read() + testsuite_output = self.stream.getvalue() + self.assertIn('startTestRun called',testsuite_output) + self.assertIn('stopTestRun called',testsuite_output) + finally: + unittest.result.TestResult.startTestRun = old_test_run_start + unittest.result.TestResult.stopTestRun = old_test_run_stop + def test_xmlrunner_safe_xml_encoding_name(self): suite = unittest.TestSuite() suite.addTest(self.DummyTest('test_pass'))