Beispiel #1
0
        def _add_test(test_runner, test_dict):
            """ add test to testcase.
            """
            def test(self):
                try:
                    test_runner.run_test(test_dict)
                except exceptions.MyBaseFailure as ex:
                    self.fail(str(ex))
                finally:
                    self.meta_datas = test_runner.meta_datas

            if "config" in test_dict:
                # run nested testcase
                test.__doc__ = test_dict["config"].get("name")
                variables = test_dict["config"].get("variables", {})
            else:
                # run api test
                test.__doc__ = test_dict.get("name")
                variables = test_dict.get("variables", {})

            if isinstance(test.__doc__, parser.LazyString):
                try:
                    parsed_variables = parser.parse_variables_mapping(
                        variables)
                    test.__doc__ = parser.parse_lazy_data(
                        test.__doc__, parsed_variables)
                except exceptions.VariableNotFound:
                    test.__doc__ = str(test.__doc__)

            return test
Beispiel #2
0
 def test_parse_tests_base_url_test_dict(self):
     tests_mapping = {
         'testcases': [{
             "config": {
                 'name': '',
                 "base_url": "$host1",
                 'variables': {
                     "host1": "https://debugtalk.com"
                 }
             },
             "teststeps": [{
                 'name': 'testcase1',
                 "base_url": "$host2",
                 "variables": {
                     "host2": "https://httprunner.org"
                 },
                 'request': {
                     'url': '/api1',
                     'method': 'GET'
                 }
             }]
         }]
     }
     parsed_testcases = parser.parse_tests(tests_mapping)
     test_dict = parsed_testcases[0]["teststeps"][0]
     parsed_test_dict = parser.parse_lazy_data(test_dict,
                                               test_dict["variables"])
     self.assertEqual(parsed_test_dict["base_url"],
                      "https://httprunner.org")
Beispiel #3
0
 def eval_content(self, content):
     """ evaluate content recursively, take effect on each variable and function in content.
         递归地评估内容,对内容中的每个变量和函数起作用。
         content may be in any data structure, include dict, list, tuple, number, string, etc.
         内容可以是任何数据结构,包括字典、列表、元组、数字、字符串等
     """
     return parser.parse_lazy_data(content, self.test_variables_mapping)
Beispiel #4
0
        def _add_test(test_runner, test_dict):
            """ add test to testcase. 把步骤添加到用例,返回一个测试步骤
            test_dict = parsed_testcases[0][teststeps][0]
            test_dict = {
                "name": "/mgmt/store/checkBusinessAddressIsExist",
                "request": {
                    "headers": {"Authorization": "LazyString(${token_type} ${access_token})"},
                    "method": "GET",
                    "params": {
                        "provinceName": "LazyString(${provinceName})",
                        "cityName": "LazyString(${cityName})",
                        "areaName": LazyString(${areaName}),
                        "streetName": LazyString(${streetName}),
                        "detailAddress": LazyString(${detailAddress})},
                        "url": LazyString(${base_url}/mgmt/store/checkBusinessAddressIsExist),
                        "verify": True
                        },
                        "variables": {
                            "provinceName": "广东省",
                            "cityName": "广州市",
                            "areaName": "海珠区",
                            "streetName": "南州街道",
                            "detailAddress": "广州市海珠区南洲街道新滘中路88号唯品同创汇6区东三街17号自编23号",
                            "access_token": LazyString(${ENV(access_token)}),
                            "token_type": LazyString(${ENV(token_type)}),
                            "base_url": LazyString(${ENV(base_url)})
                        },
                        "validate": [LazyFunction(equals(status_code, 200))]
            }
            """
            def test(self):
                try:
                    test_runner.run_test(test_dict)
                    pprint(test_runner)
                except exceptions.MyBaseFailure as ex:
                    self.fail(str(ex))
                finally:
                    self.meta_datas = test_runner.meta_datas

            if "config" in test_dict:
                # run nested testcase 嵌套testcase运行:testcase引用了testcase
                test.__doc__ = test_dict["config"].get("name")
                variables = test_dict["config"].get("variables", {})
            else:
                # run api test  运行api测试  testcase引用了api
                test.__doc__ = test_dict.get("name")
                variables = test_dict.get("variables", {})

            if isinstance(test.__doc__, parser.LazyString):  #懒惰的字符串:名字中有引用的变量

                try:
                    parsed_variables = parser.parse_variables_mapping(
                        variables)  # 所有的变量字典
                    test.__doc__ = parser.parse_lazy_data(  # 找到引用变量对应的值
                        test.__doc__, parsed_variables)
                except exceptions.VariableNotFound:
                    test.__doc__ = str(test.__doc__)
            # 返回函数<function HttpRunner._add_tests.<locals>._add_test.<locals>.test at 0x000002D69C38A550>
            return test
Beispiel #5
0
 def test_parse_tests_variable_with_function(self):
     tests_mapping = {
         "project_mapping": {
             "functions": {
                 "sum_two": sum_two,
                 "gen_random_string": gen_random_string
             }
         },
         'testcases': [
             {
                 "config": {
                     'name': '',
                     "base_url": "$host1",
                     'variables': {
                         "host1": "https://debugtalk.com",
                         "var_a": "${gen_random_string(5)}",
                         "var_b": "$var_a"
                     }
                 },
                 "teststeps": [
                     {
                         'name': 'testcase1',
                         "base_url": "$host2",
                         "variables": {
                             "host2": "https://httprunner.org",
                             "num3": "${sum_two($num2, 4)}",
                             "num2": "${sum_two($num1, 3)}",
                             "num1": "${sum_two(1, 2)}",
                             "str1": "${gen_random_string(5)}",
                             "str2": "$str1"
                         },
                         'request': {
                             'url': '/api1/?num1=$num1&num2=$num2&num3=$num3',
                             'method': 'GET'
                         }
                     }
                 ]
             }
         ]
     }
     parsed_testcases = parser.parse_tests(tests_mapping)
     test_dict = parsed_testcases[0]["teststeps"][0]
     variables = parser.parse_variables_mapping(test_dict["variables"])
     self.assertEqual(variables["num3"], 10)
     self.assertEqual(variables["num2"], 6)
     parsed_test_dict = parser.parse_lazy_data(test_dict, variables)
     self.assertEqual(parsed_test_dict["base_url"], "https://httprunner.org")
     self.assertEqual(
         parsed_test_dict["request"]["url"],
         "/api1/?num1=3&num2=6&num3=10"
     )
     self.assertEqual(variables["str1"], variables["str2"])
Beispiel #6
0
 def eval_content(self, content):
     """ evaluate content recursively, take effect on each variable and function in content.
         content may be in any data structure, include dict, list, tuple, number, string, etc.
     """
     return parser.parse_lazy_data(content, self.test_variables_mapping)