Beacon/worker/api_tests.py

49 lines
1.8 KiB
Python

# 接口测试具体实现
import requests
import json
def execute_api_test_case(test_case_id: str, endpoint: str, http_method: str, headers: dict, request_body: bytes, expected_status_code: int):
"""
实际执行API测试的函数。
可以集成 pytest, requests 等库。
"""
base_url = "http://localhost:8080" # 假设 API 服务的基地址
full_url = f"{base_url}{endpoint}"
log_output = []
success = False
actual_status = 0
response_body = b""
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":
response = requests.post(full_url, headers=headers, data=request_body, timeout=10)
# ... 其他 HTTP 方法
else:
raise ValueError(f"Unsupported HTTP method: {http_method}")
actual_status = response.status_code
response_body = response.content
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_body, "\n".join(log_output)