From b5ac5fcdf4472838d33551673978bf6f6393b872 Mon Sep 17 00:00:00 2001 From: peterxiong Date: Thu, 13 Jul 2023 14:00:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=5Fload=5Ffrom=5Ftestsuite=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=94=A8=E4=BE=8B=E7=BA=A7=E5=88=AB=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- testbase/loader.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/testbase/loader.py b/testbase/loader.py index 3a05c1a..42d115c 100644 --- a/testbase/loader.py +++ b/testbase/loader.py @@ -18,6 +18,7 @@ from __future__ import absolute_import import imp +import itertools import pkgutil import os import sys @@ -292,11 +293,16 @@ def _load_from_module( return tests def _load_from_testsuite( - self, cls, data_key=None, exclude_data_key=None, attrs=None + self, cls, data_key=None, exclude_data_key=None, attrs=None, case_params=None ): """从测试用例套类加载测试用例""" - tests = [] - for test in cls.testcases: + + if case_params is None: + case_params = [] + + zip_longest = itertools.izip_longest if six.PY2 else itertools.zip_longest + for test, attr in zip_longest(cls.testcases, case_params): + attr = attr or attrs if isinstance(test, str): test = self._load(test) if not isinstance(test, type): @@ -305,7 +311,7 @@ def _load_from_testsuite( test, data_key, exclude_data_key=exclude_data_key, - attrs=attrs, + attrs=attr, ignore_testsuite=True, ) else: @@ -313,13 +319,19 @@ def _load_from_testsuite( test, data_key, exclude_data_key=exclude_data_key, - attrs=attrs, + attrs=attr, 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=attr + ) + tests += [test(testcases)] + else: + tests += self._load_from_class( + test, data_key, exclude_data_key=exclude_data_key, attrs=attr + ) return [it for it in tests if not cls.filter(it)] From bb9acb0b8763bdc25724298a6b975ff4a264a9f0 Mon Sep 17 00:00:00 2001 From: peterxiong Date: Thu, 13 Jul 2023 14:19:30 +0800 Subject: [PATCH 2/3] fix missing tests --- testbase/loader.py | 1 + 1 file changed, 1 insertion(+) diff --git a/testbase/loader.py b/testbase/loader.py index 42d115c..5faa29c 100644 --- a/testbase/loader.py +++ b/testbase/loader.py @@ -297,6 +297,7 @@ def _load_from_testsuite( ): """从测试用例套类加载测试用例""" + tests = [] if case_params is None: case_params = [] From 72abbb42ef8f3b7ea623b341a4e932a2faa0d944 Mon Sep 17 00:00:00 2001 From: peterxiong Date: Thu, 13 Jul 2023 18:56:23 +0800 Subject: [PATCH 3/3] combine params --- testbase/loader.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/testbase/loader.py b/testbase/loader.py index 5faa29c..5c57341 100644 --- a/testbase/loader.py +++ b/testbase/loader.py @@ -17,6 +17,7 @@ """ from __future__ import absolute_import +import copy import imp import itertools import pkgutil @@ -302,8 +303,14 @@ def _load_from_testsuite( case_params = [] zip_longest = itertools.izip_longest if six.PY2 else itertools.zip_longest - for test, attr in zip_longest(cls.testcases, case_params): - attr = attr or attrs + for test, case_param in zip_longest(cls.testcases, case_params): + combind_param = {} + if attrs is not None: + combind_param = copy.deepcopy(attrs) + if case_param is not None: + combind_param.update(case_param) + combind_param = combind_param or None + if isinstance(test, str): test = self._load(test) if not isinstance(test, type): @@ -312,7 +319,7 @@ def _load_from_testsuite( test, data_key, exclude_data_key=exclude_data_key, - attrs=attr, + attrs=combind_param, ignore_testsuite=True, ) else: @@ -320,18 +327,18 @@ def _load_from_testsuite( test, data_key, exclude_data_key=exclude_data_key, - attrs=attr, + attrs=combind_param, ignore_testsuite=True, ) else: if issubclass(test, TestSuite): testcases = self._load_from_testsuite( - test, data_key, exclude_data_key=exclude_data_key, attrs=attr + test, data_key, exclude_data_key=exclude_data_key, attrs=combind_param ) tests += [test(testcases)] else: tests += self._load_from_class( - test, data_key, exclude_data_key=exclude_data_key, attrs=attr + test, data_key, exclude_data_key=exclude_data_key, attrs=combind_param ) return [it for it in tests if not cls.filter(it)]