diff --git a/httprunner/parser.py b/httprunner/parser.py index d7fb2f01..50074bb7 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -414,10 +414,14 @@ def parse_string_functions(content, variables_mapping, functions_mapping): kwargs = parse_data(kwargs, variables_mapping, functions_mapping) if func_name in ["parameterize", "P"]: + if len(args) != 1 or kwargs: + raise exceptions.ParamsError("P() should only pass in one argument!") from httprunner import loader - eval_value = loader.load_csv_file(*args) + eval_value = loader.load_csv_file(args[0]) elif func_name in ["environ", "ENV"]: - eval_value = utils.get_os_environ(*args) + if len(args) != 1 or kwargs: + raise exceptions.ParamsError("ENV() should only pass in one argument!") + eval_value = utils.get_os_environ(args[0]) else: func = get_mapping_function(func_name, functions_mapping) eval_value = func(*args, **kwargs) diff --git a/tests/test_parser.py b/tests/test_parser.py index b3a1ef17..84d9e948 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -451,3 +451,28 @@ class TestParser(unittest.TestCase): ) self.assertIsInstance(parsed_testcases, list) self.assertEqual(parsed_testcases[0]["config"]["name"], '12311') + + def test_parse_environ(self): + os.environ["PROJECT_KEY"] = "ABCDEFGH" + content = { + "variables": [ + {"PROJECT_KEY": "${ENV(PROJECT_KEY)}"} + ] + } + result = parser.parse_data(content) + + content = { + "variables": [ + {"PROJECT_KEY": "${ENV(PROJECT_KEY, abc)}"} + ] + } + with self.assertRaises(exceptions.ParamsError): + parser.parse_data(content) + + content = { + "variables": [ + {"PROJECT_KEY": "${ENV(abc=123)}"} + ] + } + with self.assertRaises(exceptions.ParamsError): + parser.parse_data(content)