コード例 #1
0
    def test_handle_config_key_case(self):
        origin_dict = {
            "Name": "test",
            "Request": {
                "url": "http://127.0.0.1:5000",
                "METHOD": "POST",
                "Headers": {
                    "Accept": "application/json",
                    "User-Agent": "ios/9.3"
                }
            }
        }
        new_dict = utils.lower_config_dict_key(origin_dict)
        self.assertIn("name", new_dict)
        self.assertIn("request", new_dict)
        self.assertIn("method", new_dict["request"])
        self.assertIn("headers", new_dict["request"])
        self.assertIn("Accept", new_dict["request"]["headers"])
        self.assertIn("User-Agent", new_dict["request"]["headers"])

        origin_dict = {
            "Name": "test",
            "Request": "$default_request"
        }
        new_dict = utils.lower_config_dict_key(origin_dict)
        self.assertIn("$default_request", new_dict["request"])
コード例 #2
0
ファイル: test_utils.py プロジェクト: zongfangfang/HttpRunner
    def test_handle_config_key_case(self):
        origin_dict = {
            "Name": "test",
            "Request": {
                "url": "http://127.0.0.1:5000",
                "METHOD": "POST",
                "Headers": {
                    "Accept": "application/json",
                    "User-Agent": "ios/9.3"
                }
            }
        }
        new_dict = utils.lower_config_dict_key(origin_dict)
        self.assertIn("name", new_dict)
        self.assertIn("request", new_dict)
        self.assertIn("method", new_dict["request"])
        self.assertIn("headers", new_dict["request"])
        self.assertIn("accept", new_dict["request"]["headers"])
        self.assertIn("user-agent", new_dict["request"]["headers"])

        origin_dict = {
            "Name": "test",
            "Request": "$default_request"
        }
        new_dict = utils.lower_config_dict_key(origin_dict)
        self.assertIn("$default_request", new_dict["request"])
コード例 #3
0
    def run_test(self, testcase_dict):
        """ run single testcase.
        @param (dict) testcase_dict
            {
                "name": "testcase description",
                "skip": "skip this test unconditionally",
                "times": 3,
                "requires": [],         # optional, override
                "function_binds": {},   # optional, override
                "variables": [],        # optional, override
                "request": {
                    "steps": [
                        {},
                        {}
                    ]
                },
            }
        @return True or raise exception during test
        """
        # parsed_request = self.init_config(testcase_dict, level="testcase")

        try:
            t_level = "testcase"
            # convert keys in request headers to lowercase
            config_dict = utils.lower_config_dict_key(testcase_dict)

            self.context.init_context(level=t_level)
            self.context.config_context(config_dict, level=t_level)

            request_config = config_dict.get('request', {})
            self.act_list = self._parse_steps(request_config["steps"])
            self.step = 0
            step_len = len(self.act_list)
            while self.step < step_len:
                action = self.act_list[self.step]
                logger.log_info("STEP[%d], ACTION[%s]" %
                                (self.step + 1, action))
                self.do_action(action)
                retcode, retmsg, n_step = self._parse_func_return(self.retval)
                if (retcode == 0 and n_step != 0):
                    self.step += n_step
                elif (retcode != 0):
                    logger.log_error("execute action[%s] error[%s]" %
                                     (action, retmsg))
                    break

                self.step += 1

        except Exception as e:
            logger.log_error(
                "run do_action error, step[%d], act_list[%s], e[%s]" %
                (self.step + 1, self.act_list[self.step], e),
                exc_info=True)
            retcode = -1
            raise
        finally:
            self._get_windows_img()
            # self.assertEqual(retcode, 0, "retcode[%d], step[%d]" %(retcode, step+1))
        return retcode
コード例 #4
0
ファイル: runner.py プロジェクト: myTestSet/TestManager
    def init_config(self, config_dict, level):
        """ create/update context variables binds
        @param (dict) config_dict
        @param (str) level, "testset" or "testcase"
        testset:
            {
                "name": "smoke testset",
                "path": "tests/data/demo_testset_variables.yml",
                "requires": [],         # optional
                "function_binds": {},   # optional
                "import_module_items": [],  # optional
                "variables": [],   # optional
                "request": {
                    "base_url": "http://127.0.0.1:5000",
                    "headers": {
                        "User-Agent": "iOS/2.8.3"
                    }
                }
            }
        testcase:
            {
                "name": "testcase description",
                "requires": [],         # optional
                "function_binds": {},   # optional
                "import_module_items": [],  # optional
                "variables": [],   # optional
                "request": {
                    "url": "/api/get-token",
                    "method": "POST",
                    "headers": {
                        "Content-Type": "application/json"
                    }
                },
                "json": {
                    "sign": "f1219719911caae89ccc301679857ebfda115ca2"
                }
            }
        @param (str) context level, testcase or testset
        """
        # convert keys in request headers to lowercase
        #将config字典的内容都转换为小写
        config_dict = utils.lower_config_dict_key(config_dict)
        #初始化context
        self.context.init_context(level)
        #提取config_context里的值进行处理,添加到上下文环境里
        self.context.config_context(config_dict, level)

        request_config = config_dict.get('request', {})
        #把config_dict里的request字典的值处理为常规类型并返回eg:sn:$sn;parsed: sn:123
        parsed_request = self.context.get_parsed_request(request_config, level)

        base_url = parsed_request.pop("base_url", None)
        self.http_client_session = self.http_client_session or HttpSession(base_url)

        return parsed_request
コード例 #5
0
ファイル: runner.py プロジェクト: zongfangfang/HttpRunner
    def init_config(self, config_dict, level):
        """ create/update context variables binds

        Args:
            config_dict (dict):
            level (enum): "testcase" or "teststep"
                testcase:
                    {
                        "name": "testcase description",
                        "variables": [],   # optional
                        "request": {
                            "base_url": "http://127.0.0.1:5000",
                            "headers": {
                                "User-Agent": "iOS/2.8.3"
                            }
                        }
                    }
                teststep:
                    {
                        "name": "teststep description",
                        "variables": [],   # optional
                        "request": {
                            "url": "/api/get-token",
                            "method": "POST",
                            "headers": {
                                "Content-Type": "application/json"
                            }
                        },
                        "json": {
                            "sign": "f1219719911caae89ccc301679857ebfda115ca2"
                        }
                    }

        Returns:
            dict: parsed request dict

        """
        # convert keys in request headers to lowercase
        config_dict = utils.lower_config_dict_key(config_dict)

        self.context.init_context_variables(level)
        variables = config_dict.get('variables') \
            or config_dict.get('variable_binds', OrderedDict())
        self.context.update_context_variables(variables, level)

        request_config = config_dict.get('request', {})
        parsed_request = self.context.get_parsed_request(request_config, level)

        base_url = parsed_request.pop("base_url", None)
        self.http_client_session = self.http_client_session or HttpSession(
            base_url)

        return parsed_request
コード例 #6
0
ファイル: runner.py プロジェクト: zhongjianbin/HttpRunner
    def init_config(self, config_dict, level):
        """ create/update context variables binds
        @param (dict) config_dict
        @param (str) level, "testset" or "testcase"
        testset:
            {
                "name": "smoke testset",
                "path": "tests/data/demo_testset_variables.yml",
                "requires": [],         # optional
                "function_binds": {},   # optional
                "import_module_items": [],  # optional
                "variables": [],   # optional
                "request": {
                    "base_url": "http://127.0.0.1:5000",
                    "headers": {
                        "User-Agent": "iOS/2.8.3"
                    }
                }
            }
        testcase:
            {
                "name": "testcase description",
                "requires": [],         # optional
                "function_binds": {},   # optional
                "import_module_items": [],  # optional
                "variables": [],   # optional
                "request": {
                    "url": "/api/get-token",
                    "method": "POST",
                    "headers": {
                        "Content-Type": "application/json"
                    }
                },
                "json": {
                    "sign": "f1219719911caae89ccc301679857ebfda115ca2"
                }
            }
        @param (str) context level, testcase or testset
        """
        # convert keys in request headers to lowercase
        config_dict = utils.lower_config_dict_key(config_dict)

        self.context.init_context(level)
        self.context.config_context(config_dict, level)

        request_config = config_dict.get('request', {})
        parsed_request = self.context.get_parsed_request(request_config, level)

        base_url = parsed_request.pop("base_url", None)
        self.http_client_session = self.http_client_session or HttpSession(base_url)

        return parsed_request
コード例 #7
0
    def init_config(self, config_dict, level):
        """ create/update context variables binds
        @param (dict) config_dict
        @param (str) level, "testset" or "testcase"
        @param (str) context level, testcase or testset
        """
        # convert keys in request headers to lowercase
        config_dict = utils.lower_config_dict_key(config_dict)

        self.context.init_context(level)
        self.context.config_context(config_dict, level)

        request_config = config_dict.get('request', {})
        parsed_request = self.context.get_parsed_request(request_config, level)

        return parsed_request
コード例 #8
0
    def init_config(self, config_dict, level):
        """ create/update context variables binds
        @param (dict) config_dict
        @param (str) level, "testset" or "testcase"
        testset:
            {
                "name": "smoke testset",
                "path": "tests/data/demo_testset_variables.yml",
                "variables": [],   # optional
                "request": {
                    "base_url": "http://127.0.0.1:5000",
                    "headers": {
                        "User-Agent": "iOS/2.8.3"
                    }
                }
            }
        testcase:
            {
                "name": "testcase description",
                "variables": [],   # optional
                "request": {
                    "url": "/api/get-token",
                    "method": "POST",
                    "headers": {
                        "Content-Type": "application/json"
                    }
                },
                "json": {
                    "sign": "f1219719911caae89ccc301679857ebfda115ca2"
                }
            }
        @param (str) context level, testcase or testset
        """
        # convert keys in request headers to lowercase
        config_dict = utils.lower_config_dict_key(config_dict)

        self.context.init_context(level)
        self.context.config_context(config_dict, level)

        request_config = config_dict.get('request', {})
        parsed_request = self.context.get_parsed_request(request_config, level)

        base_url = parsed_request.pop("base_url", None)
        self.http_client_session = self.http_client_session or HttpSession(
            base_url)

        return parsed_request
コード例 #9
0
        sys.exit(3)
    return configfile


if __name__ == "__main__":
    from httprunner import task

    # 测试用
    if (len(sys.argv) == 1):
        sys.argv += ["-c"] + ["make-execl.yaml"]
    print("CMD:[%s]\n" % (sys.argv))
    try:
        # testcase_file_path = os.path.join(os.getcwd(), 'tests/data/demo_testset_variables.yml')
        testcase_file_path = get_opts(sys.argv)
        testset = testcase.TestcaseLoader.load_test_file(testcase_file_path)
        config_dict = utils.lower_config_dict_key(testset.get("config", {}))
    except Exception as e:
        logger.log_error("task.TestSuite file[%s]" % (testcase_file_path),
                         exc_info=True)
        raise

    # for i, testcase in enumerate(suite):
    #     logger.log_info("now run testcase [%d][%s]: {}" %(i, testcase))
    #     testcase.runTest()
    logger.setup_logger("info", config_dict["logfile"], console_out=True)
    suite = task.TestSuite(testset)

    report_title = config_dict.get("name", "") + '-测试报告'
    desc = '测试报告详情:'
    report_path = gen_report_name(config_dict.get("reportdir", "."),
                                  report_title + ".html")