61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
# 接口测试具体实现
|
|
import json
|
|
|
|
import requests
|
|
|
|
|
|
def execute_api_test_case(test_case_id: str, endpoint: str, http_method: str, headers: dict, request_body: str,
|
|
expected_status_code: int):
|
|
"""
|
|
实际执行API测试的函数。
|
|
可以集成 pytest, requests 等库。
|
|
"""
|
|
base_url = "" # 假设 API 服务的基地址
|
|
|
|
full_url = f"{base_url}{endpoint}"
|
|
log_output = []
|
|
success = False
|
|
actual_status = 0
|
|
response_body = b""
|
|
response_headers = {}
|
|
|
|
log_output.append(f"Executing API test: {test_case_id} - {http_method} {full_url}")
|
|
|
|
try:
|
|
if http_method.upper() == "GET":
|
|
response = requests.get(full_url, headers=headers, timeout=10)
|
|
elif http_method.upper() == "POST":
|
|
print(request_body)
|
|
if request_body == "":
|
|
json_data = "{}"
|
|
else:
|
|
# 如果 request_body 是字符串,尝试将其解析为 JSON
|
|
json_data = json.loads(request_body) if isinstance(request_body, str) else request_body
|
|
response = requests.post(full_url, headers=headers, data=json_data, timeout=10)
|
|
# ... 其他 HTTP 方法
|
|
else:
|
|
raise ValueError(f"Unsupported HTTP method: {http_method}")
|
|
|
|
actual_status = response.status_code
|
|
response_body = response.content
|
|
response_headers = response.headers
|
|
|
|
log_output.append(f"Response Status: {actual_status}")
|
|
log_output.append(f"Response Body: {response_body.decode('utf-8')[:500]}...") # 只显示前500字符
|
|
|
|
if actual_status == expected_status_code:
|
|
success = True
|
|
log_output.append("API Test PASSED: Status code matched.")
|
|
else:
|
|
success = False
|
|
log_output.append(f"API Test FAILED: Expected {expected_status_code}, got {actual_status}.")
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
log_output.append(f"API Test Failed (Request Exception): {e}")
|
|
success = False
|
|
except Exception as e:
|
|
log_output.append(f"API Test Failed (Unexpected Error): {e}")
|
|
success = False
|
|
|
|
return success, actual_status, response_headers, response_body, "\n".join(log_output)
|