diff --git a/testbase/testcase.py b/testbase/testcase.py index 07a34fa..bd90a98 100644 --- a/testbase/testcase.py +++ b/testbase/testcase.py @@ -28,7 +28,7 @@ import six from testbase.assertion import AssertionRewriter -from testbase.util import Singleton, ThreadGroupLocal, ThreadGroupScope, smart_text, get_last_frame_stack, getmembers +from testbase.util import Singleton, ThreadGroupLocal, ThreadGroupScope, smart_text, get_last_frame_stack, getmembers, translate2type from testbase.testresult import EnumLogLevel, TestResultCollection, TestResultType from testbase.conf import settings from testbase.retry import Retry @@ -415,7 +415,7 @@ def assert_types(self): else: if not isinstance(value, define_type): # 如果期望类型是float,int型的数据, 转换为字符串,判断是否是数值型数据,如果是强制转换为数值型数据 - ret = self.translate2type(define_type, value) + ret = translate2type(define_type, value) if ret is not None: self.__params[c_name] = ret else: diff --git a/testbase/util.py b/testbase/util.py index d5554f5..f069268 100644 --- a/testbase/util.py +++ b/testbase/util.py @@ -732,5 +732,23 @@ def getmembers(object, predicate=None): return results +def translate2type(dst_type, value): + '''仅针对float、int''' + if dst_type not in [float, int]: + return + text = str(value) + float_regex = re.compile(r'^[+-]?((\d+(\.\d*)?)|\.\d+)([eE][+-]?[0-9]+)?$') + if float_regex.match(text): + if dst_type is float: + return float(text) + else: + _float_value = float(text) + _int_value = int(_float_value) + if _float_value != _int_value: + return None + return _int_value + return + + if __name__ == "__main__": pass diff --git a/tests/test_testbase/test_testcase.py b/tests/test_testbase/test_testcase.py index 553b297..a80b915 100644 --- a/tests/test_testbase/test_testcase.py +++ b/tests/test_testbase/test_testcase.py @@ -411,6 +411,11 @@ def test_parameter_rewrite(self): self.assertEqual(tc.test, 200) self.assertEqual(tc.test1, 1000) + tc1 = ParamTest(attrs={"test": 200, "test1": "1000"}) + tc1.debug_run() + self.assertEqual(tc1.test, 200) + self.assertEqual(tc1.test1, 1000) + def test_parameter_without_add_params(self): from tests.sampletest.paramtest import ParamTestWithoutAddParams with modify_settings(QTAF_PARAM_MODE=True):