def save_cookie(header, address, timeout=8, data=None, files=None): """ 保存cookie信息 :param header: 请求头 :param address: 请求地址 :param timeout: 超时时间 :param data: 请求参数 :param files: 文件路径 :return: """ cookie_path = setupMain.PATH + '/aff/data/cookie.txt' response = requests.post(url=address, data=data, headers=header, timeout=timeout, files=files) try: cookie = response.cookies.get_dict() for i in cookie: values = cookie[i] with open(cookie_path, 'w+', encoding='utf-8')as f: f.write(i+"="+values) logging.debug("cookies已保存,结果为:%s" % (i+"="+values)) except json.decoder.JSONDecodeError: return response.status_code, '' except simplejson.errors.JSONDecodeError: return response.status_code, '' except Exception as e: logging.exception('ERROR') logging.error(e) raise
def get_relevance_conf(self): relevance = dict() logging.debug("读取初始关联文件内容: %s" % self.host.items()) for key, value in self.host.items(): relevance[key] = function_replace(value) logging.debug("初始关联内容数据处理后: %s" % relevance) return relevance
def get_relevance(data, relevance_list, relevance): """ 从返回结果中获取关联键的值 :param data: 返回结果 :param relevance_list: 关联键列表 :param relevance: 关联对象 :return: """ # 关联键是否时list if not relevance_list: return relevance logging.debug("从返回结果中根据关联键%s提取值" % relevance_list) if isinstance(relevance_list, list): # 遍历关联键 for j in relevance_list: # 从结果中提取关联键的值 relevance_value = get_value(data, j) if relevance_value: # 考虑到一个关联键,多个值 if j in relevance: if isinstance(relevance[j], list): a = relevance[j] a.append(relevance_value) relevance[j] = a else: a = relevance[j] b = list() b.append(a) b.append(relevance_value) relevance[j] = b else: relevance[j] = relevance_value else: return False else: relevance_value = get_value(data, relevance_list) if relevance_value: # 考虑到一个关联键,多个值 if relevance_list in relevance: if isinstance(relevance_list, list): a = relevance[relevance_list] a.append(relevance_value) relevance[relevance_list] = a else: a = relevance[relevance_list] b = list() b.append(a) b.append(relevance_value) relevance[relevance_list] = a else: relevance[relevance_list] = relevance_value logging.debug("提取后,关联键对象\n%s" % relevance) return relevance
def send_request(data, host, address, port, relevance, _path, success): """ 再次封装请求 :param data: 测试用例 :param host: 测试地址 :param address: 接口地址 :param relevance: 关联对象 :param port: 端口地址 :param _path: case路径 :param success: 全局结果 :return: """ # logging = logdir.MyLog() config = conf.Config() logging.info("=" * 100) header = read_param.read_param(data["test_name"], data["headers"], relevance, _path, success) # 处理请求头 logging.debug("请求头处理结果: %s" % header) parameter = read_param.read_param(data["test_name"], data["parameter"], relevance, _path, success) # 处理请求参数 logging.debug("请求参数处理结果: %s" % header) try: # 如果用例中写了host和address,则使用用例中的host和address,若没有则使用全局的 host = data["host"] except KeyError: pass try: address = data["address"] except KeyError: pass host = config.host # host处理,读取配置文件中的host address = param_manage.manage(address, relevance) logging.debug("host处理结果: %s" % host) if not host: raise failureException("接口请求地址为空 %s" % data["headers"]) logging.info("请求接口:%s" % str(data["test_name"])) logging.info("请求地址:%s" % data["http_type"] + "://" + host + ":" + port + address) logging.info("请求头: %s" % str(header)) logging.info("请求参数: %s" % str(parameter)) if data["request_type"].lower() == 'post': if data["file"]: with allure.step("POST上传文件"): allure.attach("请求接口:", str(data["test_name"])) allure.attach( "请求地址", data["http_type"] + "://" + host + ":" + port + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) result = config_http.post( header=header, address=data["http_type"] + "://" + host + ":" + port + address, request_parameter_type=data["parameter_type"], files=parameter, timeout=data["timeout"]) else: with allure.step("POST请求接口"): allure.attach("请求接口:", str(data["test_name"])) allure.attach( "请求地址", data["http_type"] + "://" + host + ":" + port + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) logging.info("POST请求接口") result = config_http.post( header=header, address=data["http_type"] + "://" + host + ":" + port + address, request_parameter_type=data["parameter_type"], data=parameter, timeout=data["timeout"]) elif data["request_type"].lower() == 'get': with allure.step("GET请求接口"): allure.attach("请求接口:", str(data["test_name"])) allure.attach( "请求地址", data["http_type"] + "://" + host + ":" + port + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) logging.info("GET请求接口") result = config_http.get(header=header, address=data["http_type"] + "://" + host + ":" + port + address, data=parameter, timeout=data["timeout"]) elif data["request_type"].lower() == "put": if data["file"]: with allure.step("PUT上传文件"): allure.attach("请求接口:", str(data["test_name"])) allure.attach( "请求地址", data["http_type"] + "://" + host + ":" + port + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) logging.info("PUT上传文件") result = config_http.put( header=header, address=data["http_type"] + "://" + host + ":" + port + address, request_parameter_type=data["parameter_type"], files=parameter, timeout=data["timeout"]) else: with allure.step("PUT请求接口"): allure.attach("请求接口:", str(data["test_name"])) allure.attach( "请求地址", data["http_type"] + "://" + host + ":" + port + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) logging.info("PUT请求接口") result = config_http.put( header=header, address=data["http_type"] + "://" + host + ":" + port + address, request_parameter_type=data["parameter_type"], data=parameter, timeout=data["timeout"]) elif data["request_type"].lower() == "delete": with allure.step("DELETE请求接口"): allure.attach("请求接口:", str(data["test_name"])) allure.attach( "请求地址", data["http_type"] + "://" + host + ":" + port + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) logging.info("DELETE请求接口") result = config_http.delete(header=header, address=data["http_type"] + "://" + host + ":" + port + address, data=parameter, timeout=data["timeout"]) else: result = {"code": False, "data": False} logging.info("接口请求结果:\n %s" % str(result)) return result
def send_request(data, host, address, _path, relevance=None): """ 封装请求 :param data: 测试用例 :param host: 测试host :param address: 接口地址 :param relevance: 关联对象 :param _path: case路径 :return: """ logging.info("=" * 100) header = readParameter.read_param(data["test_name"], data["headers"], _path, relevance) if data["cookies"] is True: header["Cookie"] = initializeCookie.ini_cookie() logging.debug("请求头处理结果:%s" % header) parameter = readParameter.read_param(data["test_name"], data["parameter"], _path, relevance) logging.debug("请求参数处理结果:%s" % parameter) try: host = data["host"] except KeyError: pass try: address = data["address"] except KeyError: pass host = confManage.host_manage(host) address = replaceRelevance.replace(address, relevance) logging.debug("host处理结果: %s" % host) if not host: raise Exception("接口请求地址为空 %s" % data["headers"]) logging.info("请求接口:%s" % str(data["test_name"])) logging.info("请求地址:%s" % data["http_type"] + "://" + host + address) logging.info("请求头: %s" % str(header)) logging.info("请求参数: %s" % str(parameter)) if data["test_name"] == 'password正确': with allure.step("保存cookie信息"): allure.attach("请求接口:", str(data["test_name"])) allure.attach("请求地址", data["http_type"] + "://" + host + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) api_method.save_cookie(header=header, address=data["http_type"] + "://" + host + address, data=parameter) if data["request_type"].lower() == 'post': logging.info("请求方法: POST") if data["file"]: with allure.step("POST上传文件"): allure.attach("请求接口:", str(data["test_name"])) allure.attach("请求地址", data["http_type"] + "://" + host + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) result = api_method.post( header=header, address=data["http_type"] + "://" + host + address, request_parameter_type=data["parameter_type"], files=parameter, timeout=data["timeout"]) else: with allure.step("POST请求接口"): allure.attach("请求接口:", str(data["test_name"])) allure.attach("请求地址", data["http_type"] + "://" + host + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) result = api_method.post( header=header, address=data["http_type"] + "://" + host + address, request_parameter_type=data["parameter_type"], data=parameter, timeout=data["timeout"]) elif data["request_type"].lower() == 'get': with allure.step("GET请求接口"): allure.attach("请求接口:", str(data["test_name"])) allure.attach("请求地址", data["http_type"] + "://" + host + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) logging.info("请求方法: GET") result = api_method.get(header=header, address=data["http_type"] + "://" + host + address, data=parameter, timeout=data["timeout"]) elif data["request_type"].lower() == 'put': logging.info("请求方法: PUT") if data["file"]: with allure.step("PUT上传文件"): allure.attach("请求接口:", str(data["test_name"])) allure.attach("请求地址", data["http_type"] + "://" + host + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) result = api_method.post( header=header, address=data["http_type"] + "://" + host + address, request_parameter_type=data["parameter_type"], files=parameter, timeout=data["timeout"]) else: with allure.step("PUT请求接口"): allure.attach("请求接口:", str(data["test_name"])) allure.attach("请求地址", data["http_type"] + "://" + host + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) result = api_method.post( header=header, address=data["http_type"] + "://" + host + address, request_parameter_type=data["parameter_type"], data=parameter, timeout=data["timeout"]) elif data["request_type"].lower() == 'delete': with allure.step("DELETE请求接口"): allure.attach("请求接口:", str(data["test_name"])) allure.attach("请求地址", data["http_type"] + "://" + host + address) allure.attach("请求头", str(header)) allure.attach("请求参数", str(parameter)) logging.info("请求方法: DELETE") result = api_method.get(header=header, address=data["http_type"] + "://" + host + address, data=parameter, timeout=data["timeout"]) else: result = {"code": False, "data": False} logging.info("请求接口结果:\n %s" % str(result)) return result