def test_parse_content_with_bindings_variables(self):
        variables = {
            "str_1": "str_value1",
            "str_2": "str_value2"
        }
        testcase_parser = testcase.TestcaseParser(variables=variables)
        self.assertEqual(
            testcase_parser.eval_content_with_bindings("$str_1"),
            "str_value1"
        )
        self.assertEqual(
            testcase_parser.eval_content_with_bindings("123$str_1/456"),
            "123str_value1/456"
        )

        with self.assertRaises(ParamsError):
            testcase_parser.eval_content_with_bindings("$str_3")

        self.assertEqual(
            testcase_parser.eval_content_with_bindings(["$str_1", "str3"]),
            ["str_value1", "str3"]
        )
        self.assertEqual(
            testcase_parser.eval_content_with_bindings({"key": "$str_1"}),
            {"key": "str_value1"}
        )
 def test_eval_content_functions(self):
     functions = {"add_two_nums": lambda a, b=1: a + b}
     testcase_parser = testcase.TestcaseParser(functions=functions)
     self.assertEqual(
         testcase_parser.eval_content_functions("${add_two_nums(1, 2)}"), 3)
     self.assertEqual(
         testcase_parser.eval_content_functions(
             "/api/${add_two_nums(1, 2)}"), "/api/3")
 def test_eval_content_variables(self):
     variables = {
         "var_1": "abc",
         "var_2": "def",
         "var_3": 123,
         "var_4": {"a": 1},
         "var_5": True,
         "var_6": None
     }
     testcase_parser = testcase.TestcaseParser(variables=variables)
     self.assertEqual(
         testcase_parser._eval_content_variables("$var_1"),
         "abc"
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("var_1"),
         "var_1"
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("$var_1#XYZ"),
         "abc#XYZ"
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("/$var_1/$var_2/var3"),
         "/abc/def/var3"
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("/$var_1/$var_2/$var_1"),
         "/abc/def/abc"
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("${func($var_1, $var_2, xyz)}"),
         "${func(abc, def, xyz)}"
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("$var_3"),
         123
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("$var_4"),
         {"a": 1}
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("$var_5"),
         True
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("abc$var_5"),
         "abcTrue"
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("abc$var_4"),
         "abc{'a': 1}"
     )
     self.assertEqual(
         testcase_parser._eval_content_variables("$var_6"),
         None
     )
    def test_eval_content_functions_search_upward(self):
        testcase_parser = testcase.TestcaseParser()

        with self.assertRaises(ParamsError):
            testcase_parser._eval_content_functions("/api/${gen_md5(abc)}")

        testcase_parser.file_path = "tests/data/demo_testset_hardcode.yml"
        content = testcase_parser._eval_content_functions("/api/${gen_md5(abc)}")
        self.assertEqual(content, "/api/900150983cd24fb0d6963f7d28e17f72")
    def test_eval_content_variables_search_upward(self):
        testcase_parser = testcase.TestcaseParser()

        with self.assertRaises(ParamsError):
            testcase_parser._eval_content_variables("/api/$SECRET_KEY")

        testcase_parser.file_path = "tests/data/demo_testset_hardcode.yml"
        content = testcase_parser._eval_content_variables("/api/$SECRET_KEY")
        self.assertEqual(content, "/api/DebugTalk")
Beispiel #6
0
    def __init__(self,
                 testset,
                 variables_mapping=None,
                 http_client_session=None):
        super(TestSuite, self).__init__()
        self.test_runner_list = []

        config_dict = testset.get("config", {})
        self.output_variables_list = config_dict.get("output", [])
        self.testset_file_path = config_dict.get("path")
        config_dict_parameters = config_dict.get("parameters", [])

        config_dict_variables = config_dict.get("variables", [])
        variables_mapping = variables_mapping or {}
        config_dict_variables = utils.override_variables_binds(
            config_dict_variables, variables_mapping)

        #zhengchun 20180608
        self.testcase_parser = testcase.TestcaseParser()
        config_parametered_variables_list = self._get_parametered_variables(
            config_dict_variables, config_dict_parameters,
            self.testcase_parser)
        testcases = testset.get("testcases", [])

        for config_variables in config_parametered_variables_list:
            # config level
            config_dict["variables"] = config_variables
            # update by zhengchun, can use myRunner, 20180608
            test_runner = testset["runner"](config_dict, http_client_session)

            for testcase_dict in testcases:
                testcase_dict = copy.copy(testcase_dict)
                # testcase level
                testcase_parametered_variables_list = self._get_parametered_variables(
                    testcase_dict.get("variables", []),
                    testcase_dict.get("parameters", []),
                    test_runner.context.testcase_parser)
                for testcase_variables in testcase_parametered_variables_list:
                    testcase_dict["variables"] = testcase_variables

                    # eval testcase name with bind variables
                    variables = utils.override_variables_binds(
                        config_variables, testcase_variables)
                    self.testcase_parser.update_binded_variables(variables)
                    try:
                        testcase_name = self.testcase_parser.eval_content_with_bindings(
                            testcase_dict["name"])
                    except (AssertionError, exception.ParamsError):
                        logger.log_warning(
                            "failed to eval testcase name: {}".format(
                                testcase_dict["name"]))
                        testcase_name = testcase_dict["name"]
                    self.test_runner_list.append((test_runner, variables))

                    self._add_test_to_suite(testcase_name, test_runner,
                                            testcase_dict)
 def test_parse_content_with_bindings_multiple_identical_variables(self):
     variables = {
         "userid": 100,
         "data": 1498
     }
     testcase_parser = testcase.TestcaseParser(variables=variables)
     content = "/users/$userid/training/$data?userId=$userid&data=$data"
     self.assertEqual(
         testcase_parser.eval_content_with_bindings(content),
         "/users/100/training/1498?userId=100&data=1498"
     )
Beispiel #8
0
    def __init__(self,
                 testset,
                 variables_mapping=None,
                 http_client_session=None):
        super().__init__()
        self.test_runner_list = []

        config_dict = testset.get("config", {})
        self.output_variables_list = config_dict.get("output", [])
        self.testset_file_path = config_dict["path"]
        config_dict_parameters = config_dict.get("parameters", [])

        config_dict_variables = config_dict.get("variables", [])
        variables_mapping = variables_mapping or {}
        config_dict_variables = utils.override_variables_binds(
            config_dict_variables, variables_mapping)

        config_parametered_variables_list = self._get_parametered_variables(
            config_dict_variables, config_dict_parameters)
        self.testcase_parser = testcase.TestcaseParser()
        testcases = testset.get("testcases", [])

        for config_variables in config_parametered_variables_list:
            # config level
            config_dict["variables"] = config_variables
            #   test_runner = runner.Runner(config_dict, http_client_session)
            test_runner = YDHrunner.YDHRunner(config_dict, http_client_session)

            for testcase_dict in testcases:
                testcase_dict = copy.copy(testcase_dict)
                # testcase level
                testcase_parametered_variables_list = self._get_parametered_variables(
                    testcase_dict.get("variables", []),
                    testcase_dict.get("parameters", []))
                for testcase_variables in testcase_parametered_variables_list:
                    testcase_dict["variables"] = testcase_variables

                    # eval testcase name with bind variables
                    variables = utils.override_variables_binds(
                        config_variables, testcase_variables)
                    self.testcase_parser.update_binded_variables(variables)
                    testcase_name = self.testcase_parser.eval_content_with_bindings(
                        testcase_dict["name"])
                    self.test_runner_list.append((test_runner, variables))

                    self._add_test_to_suite(testcase_name, test_runner,
                                            testcase_dict)
    def test_parse_content_with_bindings_testcase(self):
        variables = {
            "uid": "1000",
            "random": "A2dEx",
            "authorization": "a83de0ff8d2e896dbd8efb81ba14e17d",
            "data": {"name": "user", "password": "******"}
        }
        functions = {
            "add_two_nums": lambda a, b=1: a + b,
            "get_timestamp": lambda: int(time.time() * 1000)
        }
        testcase_template = {
            "url": "http://127.0.0.1:5000/api/users/$uid/${add_two_nums(1,2)}",
            "method": "POST",
            "headers": {
                "Content-Type": "application/json",
                "authorization": "$authorization",
                "random": "$random",
                "sum": "${add_two_nums(1, 2)}"
            },
            "body": "$data"
        }
        parsed_testcase = testcase.TestcaseParser(variables, functions)\
            .eval_content_with_bindings(testcase_template)

        self.assertEqual(
            parsed_testcase["url"],
            "http://127.0.0.1:5000/api/users/1000/3"
        )
        self.assertEqual(
            parsed_testcase["headers"]["authorization"],
            variables["authorization"]
        )
        self.assertEqual(
            parsed_testcase["headers"]["random"],
            variables["random"]
        )
        self.assertEqual(
            parsed_testcase["body"],
            variables["data"]
        )
        self.assertEqual(
            parsed_testcase["headers"]["sum"],
            3
        )
    def test_parse_content_with_bindings_functions(self):
        import random, string
        functions = {
            "gen_random_string": lambda str_len: ''.join(random.choice(string.ascii_letters + string.digits) \
                for _ in range(str_len))
        }
        testcase_parser = testcase.TestcaseParser(functions=functions)

        result = testcase_parser.eval_content_with_bindings(
            "${gen_random_string(5)}")
        self.assertEqual(len(result), 5)

        add_two_nums = lambda a, b=1: a + b
        functions["add_two_nums"] = add_two_nums
        self.assertEqual(
            testcase_parser.eval_content_with_bindings("${add_two_nums(1)}"),
            2)
        self.assertEqual(
            testcase_parser.eval_content_with_bindings(
                "${add_two_nums(1, 2)}"), 3)
 def __init__(self):
     self.testset_shared_variables_mapping = OrderedDict()
     self.testcase_variables_mapping = OrderedDict()
     self.testcase_parser = testcase.TestcaseParser()
     self.init_context()
    def __init__(self,
                 testset,
                 variables_mapping=None,
                 http_client_session=None):
        super(TestSuite, self).__init__()
        self.test_runner_list = []

        self.config = testset.get("config", {})
        self.output_variables_list = self.config.get("output", [])
        self.testset_file_path = self.config.get("path")
        config_dict_parameters = self.config.get("parameters", [])

        config_dict_variables = self.config.get("variables", [])
        variables_mapping = variables_mapping or {}
        config_dict_variables = utils.override_variables_binds(
            config_dict_variables, variables_mapping)

        config_parametered_variables_lists = self._get_parametered_variables(
            config_dict_variables, config_dict_parameters)

        config_parametered_variables_list = config_parametered_variables_lists[
            0]

        self.testcase_parser = testcase.TestcaseParser()
        testcases = testset.get("testcases", [])

        for config_variables in config_parametered_variables_list:
            # config level
            self.config["variables"] = config_variables
            test_runner = runner.Runner(self.config, http_client_session)

            for testcase_dict in testcases:
                testcase_dict = copy.copy(testcase_dict)
                # testcase level
                testcase_parametered_variables_lists = self._get_parametered_variables(
                    testcase_dict.get("variables", []),
                    testcase_dict.get("parameters", []))
                testcase_parametered_variables_list = testcase_parametered_variables_lists[
                    0]
                assert_list = testcase_parametered_variables_lists[1]
                testcase_index = 0
                if 'validate' not in testcase_dict.keys():
                    testcase_dict['validate'] = []

                basic_validate = testcase_dict['validate']

                for testcase_variables in testcase_parametered_variables_list:
                    testcase_dict["variables"] = testcase_variables

                    asserts_str = assert_list[testcase_index]
                    asserts = ast.literal_eval(asserts_str)
                    # validates = []
                    checks = {}
                    if isinstance(asserts, list):
                        for validate in asserts:
                            # validate = {
                            #     'check': 'content.code',
                            #     'comparator': 'equals',
                            #     'expected': '100201'
                            # }
                            # validates.append(validate)
                            checks[validate.get('check')] = 1
                    elif isinstance(asserts, dict):
                        checks[asserts.get('check')] = 1
                        asserts = [asserts]
                    else:
                        asserts = []

                    validates = []
                    validates.extend(asserts)
                    # 去重,以parameters中的断言优先
                    for validate in basic_validate:
                        check = validate.get('check')
                        if check not in checks.keys():
                            validates.append(validate)

                    testcase_dict['validate'] = validates

                    # eval testcase name with bind variables
                    variables = utils.override_variables_binds(
                        config_variables, testcase_variables)
                    self.testcase_parser.update_binded_variables(variables)
                    try:
                        testcase_name = self.testcase_parser.eval_content_with_bindings(
                            testcase_dict["name"])
                    except (AssertionError, exceptions.ParamsError):
                        logger.log_warning(
                            "failed to eval testcase name: {}".format(
                                testcase_dict["name"]))
                        testcase_name = testcase_dict["name"]
                    self.test_runner_list.append((test_runner, variables))

                    self._add_test_to_suite(testcase_name, test_runner,
                                            testcase_dict)

                    testcase_index = testcase_index + 1
Beispiel #13
0
    def __init__(self, testset, variables_mapping=None, http_client_session=None):
        super(TestSuite, self).__init__()
        self.test_runner_list = []

        config_dict = testset.get("config", {})
        self.output_variables_list = config_dict.get("output", [])
        self.testset_file_path = config_dict.get("path")
        config_dict_parameters = config_dict.get("parameters", [])

        config_dict_variables = config_dict.get("variables", [])
        variables_mapping = variables_mapping or {}
        config_dict_variables = utils.override_variables_binds(config_dict_variables, variables_mapping)

        config_parametered_variables_list = self._get_parametered_variables(
            config_dict_variables,
            config_dict_parameters
        )
        self.testcase_parser = testcase.TestcaseParser()
        testcases = testset.get("testcases", [])
        count = 0
        
        self.all_case_list = []
        self.variables_list = []

        for config_variables in config_parametered_variables_list:
            # print("config_variables====>")
            # print(config_variables)
            # config level
            config_dict["variables"] = config_variables
            test_runner = runner.Runner(config_dict, http_client_session)
            # TODO 存储已添加的用例
            self.testcase_dict_list = []

            for testcase_dict in testcases:
                count = count + 1
                testcase_dict = copy.copy(testcase_dict)
                # testcase level
                testcase_parametered_variables_list = self._get_parametered_variables(
                    testcase_dict.get("variables", []),
                    testcase_dict.get("parameters", [])
                )
                for testcase_variables in testcase_parametered_variables_list:
                    testcase_dict["variables"] = testcase_variables

                    # eval testcase name with bind variables
                    variables = utils.override_variables_binds(
                        config_variables,
                        testcase_variables
                    )
                    self.testcase_parser.update_binded_variables(variables)
                    try:
                        testcase_name = self.testcase_parser.eval_content_with_bindings(testcase_dict["name"])
                    except (AssertionError, exception.ParamsError):
                        logger.log_warning("failed to eval testcase name: {}".format(testcase_dict["name"]))
                        testcase_name = testcase_dict["name"]
                    # TODO 不重复添加用例
                    # print("testcase_dict")
                    # print(testcase_dict)
                    if config_variables not in self.variables_list:
                        self.variables_list.append(config_variables)
                        self.testcase_dict_list.append(testcase_dict)
                        self.all_case_list.append(testcase_dict)
                        self.test_runner_list.append((test_runner, variables))

                        self._add_test_to_suite(testcase_name, test_runner, testcase_dict)
                    if testcase_dict not in self.testcase_dict_list and testcase_dict not in self.all_case_list:
                        self.testcase_dict_list.append(testcase_dict)
                        self.all_case_list.append(testcase_dict)
                        self.test_runner_list.append((test_runner, variables))

                        self._add_test_to_suite(testcase_name, test_runner, testcase_dict)
        print('for ----count ===',count)