ShopTRAINING/test/test_fixes_comprehensive.py

122 lines
5.3 KiB
Python
Raw Permalink Normal View History

2025-07-02 11:05:23 +08:00
#!/usr/bin/env python3
"""
综合测试所有修复
"""
import urllib.request
import json
def test_fixes_comprehensive():
try:
print("=== 综合测试API修复 ===")
# 1. 测试模型列表
print("\n1. 测试模型列表:")
url = 'http://localhost:5000/api/models'
with urllib.request.urlopen(url) as response:
data = response.read().decode('utf-8')
result = json.loads(data)
models = result.get('data', [])
print(f"模型数量: {len(models)}")
if models:
print("可用模型:")
for model in models:
model_type = model.get('model_type', '')
product_id = model.get('product_id', '')
model_id = model.get('model_id', '')
print(f" - {model_type}/{product_id} (ID: {model_id})")
# 2. 测试模型详情端点
print("\n2. 测试模型详情端点:")
if models:
# 测试第一个模型的详情
first_model = models[0]
model_type = first_model.get('model_type', '')
product_id = first_model.get('product_id', '')
details_url = f'http://localhost:5000/api/models/{model_type}/{product_id}/details'
print(f"请求: {details_url}")
try:
req = urllib.request.Request(details_url)
# 添加一些常见的请求头来测试CORS
req.add_header('Origin', 'http://localhost:5173')
req.add_header('Content-Type', 'application/json')
with urllib.request.urlopen(req) as response:
print(f"状态码: {response.status}")
# 检查CORS头
headers = dict(response.headers)
cors_headers = {k: v for k, v in headers.items() if 'access-control' in k.lower()}
if cors_headers:
print("CORS头:")
for k, v in cors_headers.items():
print(f" {k}: {v}")
details_data = response.read().decode('utf-8')
details_result = json.loads(details_data)
if details_result.get('status') == 'success':
print("详情API: SUCCESS")
data_obj = details_result.get('data', {})
model_info = data_obj.get('model_info', {})
training_metrics = data_obj.get('training_metrics', {})
print(f"模型信息字段: {len(model_info)}")
print(f"训练指标: {list(training_metrics.keys())}")
if training_metrics:
print("主要指标:")
for metric in ['RMSE', 'MAE', 'R2', 'MAPE']:
if metric in training_metrics:
print(f" {metric}: {training_metrics[metric]}")
else:
print(f"详情API错误: {details_result.get('message', '未知')}")
except urllib.error.HTTPError as e:
print(f"HTTP错误: {e.code}")
try:
error_data = e.read().decode('utf-8')
error_result = json.loads(error_data)
print(f"错误详情: {error_result.get('error', '无详情')}")
except:
print("无法解析错误响应")
except Exception as e:
print(f"请求异常: {e}")
# 3. 测试CORS预检请求
print("\n3. 测试CORS预检请求:")
try:
req = urllib.request.Request('http://localhost:5000/api/models', method='OPTIONS')
req.add_header('Origin', 'http://localhost:5173')
req.add_header('Access-Control-Request-Method', 'GET')
req.add_header('Access-Control-Request-Headers', 'Content-Type')
with urllib.request.urlopen(req) as response:
print(f"OPTIONS请求状态: {response.status}")
cors_headers = {k: v for k, v in dict(response.headers).items() if 'access-control' in k.lower()}
if cors_headers:
print("CORS预检响应头:")
for k, v in cors_headers.items():
print(f" {k}: {v}")
except Exception as e:
print(f"OPTIONS请求失败: {e}")
print(f"\n=== 修复状态总结 ===")
print("1. 模型详情端点: 修复文件名格式匹配问题")
print("2. CORS配置: 增强跨域头设置")
print("3. 预检请求: 添加OPTIONS方法处理")
print("4. 安全头: 添加Cross-Origin策略头")
print("\n如果前端仍有CORS错误请检查:")
print("- 前端是否运行在http://localhost:5173")
print("- API是否运行在http://localhost:5000")
print("- 浏览器开发者工具Network面板的详细错误")
except Exception as e:
print(f"测试失败: {e}")
if __name__ == "__main__":
test_fixes_comprehensive()