Example #1
0
    def assert_dict_equal(self,
                          expected,
                          actual,
                          data_key,
                          index=None,
                          sub_key=None):
        """
        断言 字典是否相等
        :param expected: 期望的结果 dict 格式
        :param actual: 实际的结果 dict 格式
        :param data_key: data key
        :param index: 下标,默认为 None
        :param sub_key: 子 data key,默认为 None
        :return:
        """
        result = False
        expected_value = parse_dict(expected, data_key, index, sub_key)
        actual_value = parse_dict(actual, data_key, index, sub_key)

        if expected_value is not None and actual_value is not None:
            result = expected_value == actual_value

        log_msg = "[%s] - 系统进行断言 assert_dict_equal: {%r} == {%r}, data_key=%s, index=%r, sub_key=%s 的结果是 {%r}!" \
                  % (__name__, expected, actual, data_key, index, sub_key, result)

        self.info(log_msg)
        # 如果执行断言失败,就抓包
        if not result:
            self.capture(log_msg[0:20])
        return result
Example #2
0
    def _parse_list(self, list_data_key: str, index: int,
                    sub_data_key_list: list):
        """
        解析 结果中的 list 数据
        :param list_data_key: list 所在的 key,例如 results[], 填写 results
        :param index:  索引下标
        :param sub_data_key_list:  列表中的每个元素的key
        :return:
        """
        self.info(
            "[%s] - 在 BaseApi 中解析响应结果的 list,使用数据:list_data_key=%s, index=%d, sub_data_key_list=%r, data_dict=%r"
            % (__name__, list_data_key, index, sub_data_key_list,
               self.json_dict))

        resp = self._parse_http_resp()
        for sub_data_key in sub_data_key_list:
            value = parse_dict(dict_data=self.json_dict,
                               data_key=list_data_key,
                               index=index,
                               sub_key=sub_data_key)
            resp[sub_data_key] = value
            self.info(
                "[%s] - 在 BaseApi 中解析响应的 JSON 字典成功,data_key=%s, value=%r" %
                (__name__, sub_data_key, value))

        return resp
Example #3
0
 def _get_config(self, data_dict: dict, data_key: str):
     """
     获取配置文件的值
     :param data_dict:  配置文件字典
     :param data_key:  配置文件路径
     :return:
     """
     self.info("[%s] - 获取配置文件的值:data_key=%s, data_dict=%r!" %
               (__name__, data_key, data_dict))
     return parse_dict(dict_data=data_dict, data_key=data_key)
Example #4
0
 def prepare(self):
     """
     测试执行使用的测试固件,包含前置条件和清理操作
     :return:
     """
     # 首先是前置条件,在yeild之前
     # 准备日志条件,就可以记录整个测试
     self.init_logger(__name__)
     # 准备请求对象,就可以传递请求给业务,也可以对请求进行抓包截图
     self.init_request(
         schema=parse_dict(dict_data=self.__test, data_key="config.schema"),
         host=parse_dict(dict_data=self.__test, data_key="config.host")
     )
     # 是 yeild 的关键字,代表执行test_ 开头的方法的具体内容
     self.info("[%s]- 完成测试的前置条件 set_up!  " % __name__)
     yield
     # 接下来是 清理操作
     self.close_request()
     self.wait()
     self.info("[%s]- 完成测试的清理操作  tear_up!" % __name__)
Example #5
0
    def _parse(self, body_key_list=None):
        """
        解析 send 的结果
        :param body_key_list: 需要解析的响应正文中的 key 的列表
        :return:
        """
        self.info(
            "[%s] - 在 BaseApi 中解析响应结果,使用数据:body_key_list=%r, data_dict=%r" %
            (__name__, body_key_list, self.json_dict))

        resp = self._parse_http_resp()
        for data_Key in body_key_list:
            value = parse_dict(dict_data=self.json_dict, data_key=data_Key)
            resp[data_Key] = value
            self.info("[%s] - 解析响应的 JSON 字典成功,data_key=%s, value=%r" %
                      (__name__, data_Key, value))

        return resp
Example #6
0
    def login(self, data_dict: dict):
        """
        登录
        :param data_dict:
        :return:
        """
        req_uri = self._get_config(self.__config, "LOGIN.URI")
        req_method = self._get_config(self.__config, "LOGIN.METHOD")
        req_data = {
            self._get_config(self.__config, "SIGN.BODY_VV_SIGNATURE"):
            data_dict.get("vv_signature"),
            self._get_config(self.__config, "SIGN.BODY_VV_TIME"):
            data_dict.get("vv_time"),
            self._get_config(self.__config, "LOGIN.PARAM.PASSWORD"):
            data_dict.get("password"),
            self._get_config(self.__config, "LOGIN.PARAM.IS_ANDROID"):
            data_dict.get("is_android"),
            self._get_config(self.__config, "LOGIN.PARAM.CLIENT_ID"):
            data_dict.get("client_id"),
            self._get_config(self.__config, "LOGIN.PARAM.MOBILE"):
            data_dict.get("mobile"),
            self._get_config(self.__config, "LOGIN.PARAM.VERSION"):
            data_dict.get("version")
        }
        req_data = self._remove_none_param(req_data)
        # 认证
        # 真正的发请求
        self._send(uri=req_uri, method=req_method, data_dict=req_data)
        # 返回响应的结果
        resp_body_key_list = self._get_config(data_dict=self.__config,
                                              data_key="LOGIN.RESP.DATA_KEY")
        resp = self._parse(body_key_list=resp_body_key_list)

        data_key_token = self._get_config(self.__config,
                                          "LOGIN.RESP.DATA_KEY_TOKEN")
        self.__token = parse_dict(dict_data=resp, data_key=data_key_token)
        return resp