Files
aitsc/test_optimization_history.py
2025-10-10 23:39:54 +08:00

262 lines
8.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
优化历史功能测试脚本
测试API接口和数据库操作
"""
import requests
import json
import time
from datetime import datetime
# 测试配置
BASE_URL = "http://localhost:5002"
TEST_USER_ID = 1
def test_api_endpoint(endpoint, method="GET", data=None, headers=None):
"""测试API接口"""
url = f"{BASE_URL}{endpoint}"
try:
if method == "GET":
response = requests.get(url, headers=headers)
elif method == "POST":
response = requests.post(url, json=data, headers=headers)
elif method == "PUT":
response = requests.put(url, json=data, headers=headers)
elif method == "DELETE":
response = requests.delete(url, headers=headers)
print(f"🔍 {method} {endpoint}")
print(f" 状态码: {response.status_code}")
if response.status_code == 200:
result = response.json()
if result.get('success'):
print(f" ✅ 成功: {result.get('message', '操作成功')}")
return result
else:
print(f" ❌ 失败: {result.get('message', '未知错误')}")
return None
else:
print(f" ❌ HTTP错误: {response.status_code}")
return None
except Exception as e:
print(f" ❌ 请求失败: {str(e)}")
return None
def test_optimization_history_page():
"""测试优化历史页面"""
print("=" * 60)
print("🧪 测试优化历史页面")
print("=" * 60)
# 测试页面访问
response = requests.get(f"{BASE_URL}/optimization-history")
if response.status_code == 200:
print("✅ 优化历史页面访问成功")
return True
else:
print(f"❌ 优化历史页面访问失败: {response.status_code}")
return False
def test_optimization_history_api():
"""测试优化历史API接口"""
print("=" * 60)
print("🧪 测试优化历史API接口")
print("=" * 60)
# 模拟用户认证头实际应用中需要真实的token
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer test_token' # 这里需要真实的认证token
}
# 1. 测试获取历史记录
print("\n📋 测试获取历史记录...")
result = test_api_endpoint("/api/optimization-history", "GET", headers=headers)
# 2. 测试添加历史记录
print("\n 测试添加历史记录...")
test_data = {
"original_text": "测试原始文本",
"optimized_text": "这是测试优化后的文本内容,包含了更详细和结构化的信息。",
"optimization_type": "测试类型",
"industry": "测试行业",
"profession": "测试职业",
"tags": ["测试标签1", "测试标签2"]
}
result = test_api_endpoint("/api/optimization-history", "POST", data=test_data, headers=headers)
# 3. 测试获取统计信息
print("\n📊 测试获取统计信息...")
result = test_api_endpoint("/api/optimization-history/stats", "GET", headers=headers)
# 4. 测试获取分析数据
print("\n📈 测试获取分析数据...")
result = test_api_endpoint("/api/optimization-history/analytics", "GET", headers=headers)
# 5. 测试获取收藏记录
print("\n⭐ 测试获取收藏记录...")
result = test_api_endpoint("/api/optimization-history/favorites", "GET", headers=headers)
return True
def test_database_connection():
"""测试数据库连接"""
print("=" * 60)
print("🧪 测试数据库连接")
print("=" * 60)
try:
import pymysql
from config import Config
# 解析数据库连接信息
db_uri = Config.TENCENT_SQLALCHEMY_DATABASE_URI
if db_uri.startswith('mysql+pymysql://'):
db_uri = db_uri.replace('mysql+pymysql://', '')
if '?' in db_uri:
db_uri, params = db_uri.split('?', 1)
auth_host_db = db_uri.split('@')
auth_part = auth_host_db[0]
host_db_part = auth_host_db[1]
username, password = auth_part.split(':', 1)
host_port, database = host_db_part.split('/', 1)
host, port = host_port.split(':')
port = int(port)
# 连接数据库
connection = pymysql.connect(
host=host,
port=port,
user=username,
password=password,
database=database,
charset='utf8mb4'
)
cursor = connection.cursor()
# 检查表是否存在
tables = ['optimization_history', 'optimization_tags', 'optimization_favorites', 'user_usage_stats', 'system_config']
for table in tables:
cursor.execute(f"SHOW TABLES LIKE '{table}'")
if cursor.fetchone():
cursor.execute(f"SELECT COUNT(*) FROM {table}")
count = cursor.fetchone()[0]
print(f"✅ 表 {table} 存在,记录数: {count}")
else:
print(f"❌ 表 {table} 不存在")
# 检查示例数据
cursor.execute("SELECT id, original_text, optimization_type FROM optimization_history LIMIT 3")
records = cursor.fetchall()
print(f"\n📋 示例历史记录:")
for record in records:
print(f" ID: {record[0]}, 类型: {record[2]}, 内容: {record[1][:30]}...")
cursor.close()
connection.close()
print("✅ 数据库连接测试成功")
return True
except Exception as e:
print(f"❌ 数据库连接测试失败: {str(e)}")
return False
def test_frontend_integration():
"""测试前端集成"""
print("=" * 60)
print("🧪 测试前端集成")
print("=" * 60)
# 检查优化历史页面模板是否存在
try:
with open('src/flask_prompt_master/templates/optimization_history.html', 'r', encoding='utf-8') as f:
content = f.read()
# 检查关键元素
checks = [
('历史记录列表', 'historyList' in content),
('搜索功能', 'historySearchInput' in content),
('筛选功能', 'typeFilter' in content),
('统计卡片', 'stats-card' in content),
('分页功能', 'pagination' in content),
('操作按钮', 'btn-copy' in content),
('收藏功能', 'btn-favorite' in content),
('评分功能', 'rating' in content)
]
print("📋 前端元素检查:")
for name, exists in checks:
if exists:
print(f"{name}")
else:
print(f"{name}")
return all(exists for _, exists in checks)
except FileNotFoundError:
print("❌ 优化历史页面模板文件不存在")
return False
except Exception as e:
print(f"❌ 前端集成测试失败: {str(e)}")
return False
def main():
"""主测试函数"""
print("🚀 优化历史功能测试开始")
print("=" * 60)
tests = [
("数据库连接", test_database_connection),
("前端集成", test_frontend_integration),
("页面访问", test_optimization_history_page),
("API接口", test_optimization_history_api)
]
results = []
for test_name, test_func in tests:
print(f"\n🧪 开始测试: {test_name}")
try:
result = test_func()
results.append((test_name, result))
except Exception as e:
print(f"❌ 测试 {test_name} 异常: {str(e)}")
results.append((test_name, False))
# 输出测试结果
print("\n" + "=" * 60)
print("📊 测试结果汇总")
print("=" * 60)
passed = 0
total = len(results)
for test_name, result in results:
status = "✅ 通过" if result else "❌ 失败"
print(f"{test_name}: {status}")
if result:
passed += 1
print(f"\n📈 总体结果: {passed}/{total} 测试通过")
if passed == total:
print("🎉 所有测试通过!优化历史功能已就绪!")
else:
print("⚠️ 部分测试失败,请检查相关功能")
return passed == total
if __name__ == '__main__':
success = main()
exit(0 if success else 1)