From 8c27b1138169e87da6eee2b59ec4b4a65d47671f Mon Sep 17 00:00:00 2001 From: Ming5024 <774517491@qq.com> Date: Thu, 4 May 2023 18:00:29 +0800 Subject: [PATCH 1/3] feat: support testsuite in testsuite --- testbase/loader.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/testbase/loader.py b/testbase/loader.py index 3a05c1a..5da4191 100644 --- a/testbase/loader.py +++ b/testbase/loader.py @@ -317,9 +317,15 @@ def _load_from_testsuite( ignore_testsuite=True, ) else: - tests += self._load_from_class( - test, data_key, exclude_data_key=exclude_data_key, attrs=attrs - ) + if issubclass(test, TestSuite): + testcases = self._load_from_testsuite( + test, data_key, exclude_data_key=exclude_data_key, attrs=attrs + ) + tests += [test(testcases)] + else: + tests += self._load_from_class( + test, data_key, exclude_data_key=exclude_data_key, attrs=attrs + ) return [it for it in tests if not cls.filter(it)] From 6162f2bc4151618783a307d85f69c85e25d967e4 Mon Sep 17 00:00:00 2001 From: Ming5024 <774517491@qq.com> Date: Tue, 9 May 2023 20:21:22 +0800 Subject: [PATCH 2/3] feat: update --- testbase/testsuite.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/testbase/testsuite.py b/testbase/testsuite.py index 7e12916..bf3a2ac 100644 --- a/testbase/testsuite.py +++ b/testbase/testsuite.py @@ -198,9 +198,16 @@ def _log_testsuite_error(self, testsuite, testresult, message): def _run_test(self, testsuite, test, testresult_factory, testresult): """执行测试用例""" - testresult.begin_step(test.test_name) + step_name = test.test_name + if isinstance(test, TestSuite): + step_name += "(%s)" % test.exec_mode + if testsuite.root_test_result and testsuite.root_test_result != testresult: + testsuite.root_test_result.begin_step(step_name) + testresult.begin_step(step_name) testsuite.current_stage = test.test_name runner = getattr(test, "case_runner", TestCaseRunner()) + if isinstance(test, TestSuite): + test.root_test_result = testresult case_result = runner.run(test, testresult_factory) if not case_result.passed: self._log_testsuite_error( @@ -316,9 +323,13 @@ def run(self, testsuite, testresult_factory): raise ValueError("Invalid testsuite type: %s" % type(testsuite)) testresult = testresult_factory.create(testsuite) testresult.begin_test(testsuite) - testresult.begin_step("pre_test") + if testsuite.root_test_result and testsuite.root_test_result != testresult: + testsuite.root_test_result.begin_step("pre_test - %s" % testsuite.__class__.__name__) + testresult.begin_step("pre_test - %s" % testsuite.__class__.__name__) testsuite.init_test(testresult) result = TestResultCollection([testresult], False) + if not testsuite.root_test_result: + testsuite.root_test_result = testresult try: testsuite.pre_test() except: @@ -345,7 +356,9 @@ def run(self, testsuite, testresult_factory): else: raise ValueError("Invalid exec mode: %s" % self._exec_mode) - testresult.begin_step("post_test") + if testsuite.root_test_result and testsuite.root_test_result != testresult: + testsuite.root_test_result.begin_step("post_test - %s" % testsuite.__class__.__name__) + testresult.begin_step("post_test - %s" % testsuite.__class__.__name__) try: testsuite.post_test() except: @@ -388,6 +401,7 @@ def __init__(self, testcases): self.__testcases = testcases self.__testresults = [] self.__current_stage = "" + self.__root_test_result = None def __iter__(self): for it in self.__testcases: @@ -440,6 +454,14 @@ def current_stage(self): def current_stage(self, value): self.__current_stage = value + @property + def root_test_result(self): + return self.__root_test_result + + @root_test_result.setter + def root_test_result(self, value): + self.__root_test_result = value + @classmethod def filter(cls, testcase): if not cls.testcase_filter: From 32537998d31c1bcf3a4f72f5ac1efb84dcb37a4c Mon Sep 17 00:00:00 2001 From: Ming5024 <774517491@qq.com> Date: Tue, 9 May 2023 20:55:09 +0800 Subject: [PATCH 3/3] feat: update --- testbase/testsuite.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/testbase/testsuite.py b/testbase/testsuite.py index bf3a2ac..c306fd9 100644 --- a/testbase/testsuite.py +++ b/testbase/testsuite.py @@ -200,14 +200,14 @@ def _run_test(self, testsuite, test, testresult_factory, testresult): """执行测试用例""" step_name = test.test_name if isinstance(test, TestSuite): - step_name += "(%s)" % test.exec_mode + step_name = "【%s】(%s)" % (step_name, test.exec_mode) if testsuite.root_test_result and testsuite.root_test_result != testresult: testsuite.root_test_result.begin_step(step_name) testresult.begin_step(step_name) testsuite.current_stage = test.test_name runner = getattr(test, "case_runner", TestCaseRunner()) if isinstance(test, TestSuite): - test.root_test_result = testresult + test.root_test_result = testsuite.root_test_result case_result = runner.run(test, testresult_factory) if not case_result.passed: self._log_testsuite_error( @@ -324,8 +324,8 @@ def run(self, testsuite, testresult_factory): testresult = testresult_factory.create(testsuite) testresult.begin_test(testsuite) if testsuite.root_test_result and testsuite.root_test_result != testresult: - testsuite.root_test_result.begin_step("pre_test - %s" % testsuite.__class__.__name__) - testresult.begin_step("pre_test - %s" % testsuite.__class__.__name__) + testsuite.root_test_result.begin_step("【%s】 - pre_test" % testsuite.__class__.__name__) + testresult.begin_step("【%s】 - pre_test" % testsuite.__class__.__name__) testsuite.init_test(testresult) result = TestResultCollection([testresult], False) if not testsuite.root_test_result: @@ -357,8 +357,8 @@ def run(self, testsuite, testresult_factory): raise ValueError("Invalid exec mode: %s" % self._exec_mode) if testsuite.root_test_result and testsuite.root_test_result != testresult: - testsuite.root_test_result.begin_step("post_test - %s" % testsuite.__class__.__name__) - testresult.begin_step("post_test - %s" % testsuite.__class__.__name__) + testsuite.root_test_result.begin_step("【%s】 - post_test" % testsuite.__class__.__name__) + testresult.begin_step("【%s】 - post_test" % testsuite.__class__.__name__) try: testsuite.post_test() except: