def json_format(json_dict): """ 功能:json字典 --> 带缩进格式的json字符串 :param json_dict: json字典 :return: 带缩进格式的json字符串 """ validator.check_paramType_dict(json_dict) return json.dumps(json_dict, sort_keys=True, indent=4, ensure_ascii=False)
def _parseYaml_params_parameterize(self, http_params, module_key): """ 功能:生成scn的参数化模板 :param http_params: :return: """ validator.check_paramType_dict(http_params) parameterize_func_list = [] if http_params: for param in http_params.keys(): parameterize_func_list.append("{0} = testdata.random_{1}_{0}()".format(param, module_key)) return "\n ".join(parameterize_func_list)
def _parseYaml_params_eqSelf(self, http_params): """ 功能:处理http的参数 如果param:["listPage", "listSize", "deviceName"] 则返回结果:listPage=listPage, listSize=listSize, deviceName=deviceName :param http_params: :return: """ validator.check_paramType_dict(http_params) api_params_list_eqNone = [] if http_params: for param in http_params.keys(): api_params_list_eqNone.append("{0}={0},".format(param)) return "\n\t\t\t\t".join(api_params_list_eqNone)
def _parseYaml_params_addPrefixEdit_eqNone(self, http_params): """ 功能:处理http的参数 如果param:["listPage", "listSize", "deviceName"] 则返回结果:edit_listPage=None, edit_listSize=None, edit_deviceName=None :param http_params: :return: """ validator.check_paramType_dict(http_params) api_params_list_eqNone = [] if http_params: for param in http_params.keys(): api_params_list_eqNone.append("edit_{}=None".format(param)) return ", ".join(api_params_list_eqNone)
def _parseYaml_params_responseApiDict(self, http_params): """ 功能:生成scn的返回信息模板 :param http_params: :return: """ validator.check_paramType_dict(http_params) parameterize_func_list = [] if http_params: for param in http_params.keys(): parameterize_func_list.append("if {0} is not None: info_dict.setdefault('{0}', {0})".format(param)) return "\n ".join(parameterize_func_list)
def _parseYaml_params_request(self, http_params): """ 功能:处理http的参数 如果param:["listPage", "listSize", "deviceName"] 则返回结果: http_data["listPage"]: listPage, http_data["listSize"]: listSize, http_data["deviceName"]: deviceName, :param http_params: :return: """ validator.check_paramType_dict(http_params) api_params_list = [] if http_params: for param in http_params.keys(): api_params_list.append('http_data["{0}"]: {0},'.format(param)) return "\n\t\t\t".join(api_params_list)
def base_filter_data(self, data: dict): """ 功能:移除data字典中value是None的key, 如果value也是个字典,其中的None或""也会被移除。 :param data: http请求参数,字典形式 :return: 处理过的字典 """ validator.check_paramType_dict(data) keys = data.keys() keys_to_remove = [] for k in keys: v = data[k] if v is None: keys_to_remove.append(k) if isinstance(data[k], dict): self.base_filter_data(data[k]) for k in keys_to_remove: data.pop(k) return data
def parse_csv_param(self, test_data: dict, module_key: str): """ 功能: 解析csv中的参数 :param test_data: 一行字典形式的用例数据 :param module_key: :return: 返回一个list """ validator.check_paramType_dict(test_data) validator.check_paramType_str(module_key) csvKeys_list = test_data.keys() keywords_list = ["$", "$(", "(", ")"] generator_objs_list = test_data["generator_objs_list"] = list() for csvKey in csvKeys_list: value = test_data[csvKey] if not value: continue # 解析依赖字段 if any(keyword in value for keyword in keywords_list): pattern = r"\$\((.*?)\)" c = re.compile(pattern, re.S) depend_fields_list = re.findall(c, value) # depend_fields_list 返回的是到所有$()中的内容 print("depend_fields_list: {}".format(depend_fields_list)) depend_values_list = [] if depend_fields_list: depend_fields_format = re.sub(r"\$\(.*?\)", r"{}", value) for depend_field in depend_fields_list: # 遍历每一个$()中匹配到的内容 print("depend_field:{}".format(depend_field)) depend_key = None # 如果depend_field包含有点, 则有两种情况(有key和无key) if "." in depend_field: depend_field, depend_key = depend_field.split(".") if not depend_key: depend_key = csvKey func_name = "depend_{}".format(depend_field) generator_obj = self._get_depend_param(func_name) generator_objs_list.append(generator_obj) depend_param = generator_obj.__next__() print(depend_param) if not isinstance(depend_param, dict): depend_values_list.append(depend_param) else: if not depend_key: depend_key = csvKey depend_param = depend_param.get(depend_key) if not depend_param: raise Exception( "依赖字典中的key不存在:{}".format(depend_key)) depend_values_list.append(depend_param) # 待填充列表: 对应所有实际在{}中填充的值 print("depend_values_list: {}".format(depend_values_list)) value = depend_fields_format.format(*depend_values_list) # 解析列表 if value.startswith("["): if not value.endswith("]"): raise CsvContentException( "这不是一个列表字符串: {}".format(value)) try: value = eval(value) test_data[csvKey] = value continue except: raise CsvContentException( "这不是一个列表字符串: {}".format(value)) # 解析字典 if value.startswith("{"): if not value.endswith("}"): raise CsvContentException( "这不是一个字典字符串: {}".format(value)) try: tmp_value = eval(value) test_data[csvKey] = tmp_value continue except: raise CsvContentException( "这不是一个字典字符串: {}".format(value)) test_data[csvKey] = value continue else: raise exceptions.CsvContentException( "csv填写内容异常: {}".format(value)) if not isinstance(value, str): continue # 解析随机字段 if isinstance(value, str) and (value.lower() == "r" or value.lower() == "random"): func_name = "random_{}_{}".format(module_key, csvKey) test_data[csvKey] = self._get_random_param(func_name) continue # 解析列表 if value.startswith("["): if not value.endswith("]"): raise CsvContentException("这不是一个列表字符串: {}".format(value)) try: value = eval(value) test_data[csvKey] = value continue except: raise CsvContentException("这不是一个列表字符串: {}".format(value)) # 解析字典 if value.startswith("{"): if not value.endswith("}"): raise CsvContentException("这不是一个字典字符串: {}".format(value)) try: tmp_value = eval(value) test_data[csvKey] = tmp_value continue except: raise CsvContentException("这不是一个字典字符串: {}".format(value)) # 解析空字符串 if value in ["e", "empty"]: test_data[csvKey] = "" continue # 解析布尔值False if value in ["False", "false", "f", "F"]: test_data[csvKey] = False continue # 解析布尔值True if value in ["True", "true", "t", "T"]: test_data[csvKey] = True continue return test_data