优化base_api中的上传文件处理,规范部分方法的参数名

This commit is contained in:
wangjie 2024-12-24 18:12:54 +08:00
parent 833d00d3a2
commit 88ea6b15dc
1 changed files with 37 additions and 23 deletions

View File

@ -29,17 +29,17 @@ class BaseApi:
"""基础类,对请求方法进行二次封装"""
@staticmethod
def _make_url(address: str) -> str:
def _make_url(path: str) -> str:
"""整理拼接URL"""
# 如果address是以http开头的则直接使用该address不与host进行拼接
if address.lower().startswith("http"):
return address
# 确保host不以/结尾
# 如果path是完整的URL则直接返回不与host进行拼接
if path.lower().startswith("http"):
return path
# 获取运行环境地址,并确保没有末尾斜杠
host = EnvConfig.URL().rstrip("/")
# 确保address是以/开头
address = "/" + address.lstrip("/")
# 拼接完整URL地址确保拼接时不会有重复的“/”
url = host + "/" + path.lstrip("/")
return f"{host}{address}"
return url
@staticmethod
def _make_headers(headers) -> dict[Any, Any]:
@ -60,18 +60,17 @@ class BaseApi:
return method_enum.value
@staticmethod
def _make_params(params) -> dict[str, int | Any]:
def _make_params(input_params) -> dict[str, int | Any]:
"""对请求参数进行预处理"""
params = params or {}
# 在请求参数里默认加上查询范围
params = {
merged_params = {
"page": 1,
"size": 20,
'startTime': TimeUtil.get_seven_days_ago_time_unix(),
'endTime': TimeUtil.get_current_time_unix(),
**params
**(input_params or {})
}
return params
return merged_params
@staticmethod
def _make_files(files_info: Union[str, Dict[str, str]]) -> Dict[str, Tuple[str, Any, str]]:
@ -95,15 +94,26 @@ class BaseApi:
for field_name, file_path in files_info.items():
if not isinstance(field_name, str) or not isinstance(file_path, str):
raise TypeError("files_info字典中的每个条目必须是一个字符串键和一个字符串值")
file_name = os.path.basename(file_path)
files[field_name] = (file_name, open(file_path, 'rb'), get_MIME(file_path))
with allure.step("上传的附件"):
allure_attach_file(file_name, file_path)
# 验证和清理文件路径
if not os.path.isfile(file_path):
raise FileNotFoundError(f"上传文件: {file_path} 不存在")
try:
file_name = os.path.basename(file_path)
with open(file_path, 'rb') as f:
mime_type = get_MIME(file_path)
files[field_name] = (file_name, f, mime_type)
with allure.step("上传的附件"):
allure_attach_file(file_name, file_path)
except Exception as e:
logger.error(f"上传文件 {file_path} 时出错: {e}")
raise
return files
@staticmethod
def _request(method, address, headers=None, params=None, data=None, json_data=None,
files=None) -> requests.Response:
files=None, timeout=30) -> requests.Response:
"""发送http请求返回response对象"""
# 处理请求参数
url = BaseApi._make_url(address)
@ -114,11 +124,14 @@ class BaseApi:
# 发送请求
try:
start_time = time.time() # 记录请求开始时间
# 发起请求
response = requests.request(method=method, url=url, headers=headers, params=params,
data=data, json=json_data, files=files)
data=data, json=json_data, files=files, timeout=timeout)
end_time = time.time() # 记录请求结束时间
duration = end_time - start_time # 计算请求时长
# 记录请求时的详情信息
r_uri = response.request.url
r_method = method.upper()
@ -139,7 +152,8 @@ class BaseApi:
f"接口响应头:{r_respone_headers}\n" \
f"接口响应时长:{r_duration:.2f}\n" \
f"HTTP状态码{r_respone_status_code}\n" \
f"=================================================="
f"==================================================\n\n"
with allure.step("请求内容"):
allure_attach_text("请求地址", f"{r_uri}")
allure_attach_text("请求方式", f"{r_method}")
@ -147,7 +161,7 @@ class BaseApi:
allure_attach_json("请求体", f"{r_body}")
allure_attach_text("请求curl命令", f"{r_curl}")
with allure.step("响应内容"):
allure_attach_json("响应体", f"{json.dumps(r_respone, ensure_ascii=False, indent=4)}")
allure_attach_json("响应体", json.dumps(r_respone, ensure_ascii=False, indent=4))
allure_attach_text("HTTP状态码", f"{r_respone_status_code}")
allure_attach_text("响应头", f"{r_respone_headers}")
@ -174,9 +188,9 @@ class BaseApi:
files=files)
@staticmethod
def send_delete_request(address, data=None, json=None, headers=None, files=None) -> requests.Response:
def send_delete_request(address, data=None, json_data=None, headers=None, files=None) -> requests.Response:
"""发送delete请求返回response对象"""
return BaseApi._request(method='delete', address=address, data=data, json_data=json, headers=headers,
return BaseApi._request(method='delete', address=address, data=data, json_data=json_data, headers=headers,
files=files)
@staticmethod