331 lines
11 KiB
Python
331 lines
11 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
优化历史功能测试脚本
|
|||
|
|
测试历史记录的CRUD操作、搜索、筛选、导出等功能
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import requests
|
|||
|
|
import json
|
|||
|
|
import time
|
|||
|
|
from datetime import datetime, timedelta
|
|||
|
|
|
|||
|
|
# 测试配置
|
|||
|
|
BASE_URL = "http://localhost:5002"
|
|||
|
|
TEST_USER_ID = 1
|
|||
|
|
|
|||
|
|
def test_api_endpoint(endpoint, method="GET", data=None, expected_status=200):
|
|||
|
|
"""测试API端点"""
|
|||
|
|
url = f"{BASE_URL}{endpoint}"
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
if method == "GET":
|
|||
|
|
response = requests.get(url, timeout=10)
|
|||
|
|
elif method == "POST":
|
|||
|
|
response = requests.post(url, json=data, timeout=10)
|
|||
|
|
elif method == "PUT":
|
|||
|
|
response = requests.put(url, json=data, timeout=10)
|
|||
|
|
elif method == "DELETE":
|
|||
|
|
response = requests.delete(url, timeout=10)
|
|||
|
|
else:
|
|||
|
|
raise ValueError(f"不支持的HTTP方法: {method}")
|
|||
|
|
|
|||
|
|
print(f"✅ {method} {endpoint} - 状态码: {response.status_code}")
|
|||
|
|
|
|||
|
|
if response.status_code == expected_status:
|
|||
|
|
try:
|
|||
|
|
result = response.json()
|
|||
|
|
print(f" 响应: {json.dumps(result, ensure_ascii=False, indent=2)[:200]}...")
|
|||
|
|
return result
|
|||
|
|
except:
|
|||
|
|
print(f" 响应: {response.text[:200]}...")
|
|||
|
|
return response.text
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 期望状态码 {expected_status}, 实际状态码 {response.status_code}")
|
|||
|
|
print(f" 错误信息: {response.text}")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
except requests.exceptions.RequestException as e:
|
|||
|
|
print(f"❌ 请求失败: {str(e)}")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def test_history_crud():
|
|||
|
|
"""测试历史记录CRUD操作"""
|
|||
|
|
print("\n" + "="*50)
|
|||
|
|
print("测试历史记录CRUD操作")
|
|||
|
|
print("="*50)
|
|||
|
|
|
|||
|
|
# 1. 测试保存历史记录
|
|||
|
|
print("\n1. 测试保存历史记录")
|
|||
|
|
history_data = {
|
|||
|
|
"original_input": "请帮我写一个关于人工智能的提示词",
|
|||
|
|
"generated_prompt": "你是一位专业的人工智能专家,请详细分析人工智能的发展趋势、应用领域和未来前景。",
|
|||
|
|
"template_id": 1,
|
|||
|
|
"template_name": "AI专家助手",
|
|||
|
|
"generation_time": 1500,
|
|||
|
|
"satisfaction_rating": 4,
|
|||
|
|
"tags": ["AI", "技术", "分析"],
|
|||
|
|
"is_favorite": False
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
result = test_api_endpoint("/api/history/save", "POST", history_data, 200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
history_id = result["data"]["id"]
|
|||
|
|
print(f" 历史记录ID: {history_id}")
|
|||
|
|
return history_id
|
|||
|
|
else:
|
|||
|
|
print(" 保存历史记录失败")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def test_get_history_list():
|
|||
|
|
"""测试获取历史记录列表"""
|
|||
|
|
print("\n2. 测试获取历史记录列表")
|
|||
|
|
|
|||
|
|
# 基本查询
|
|||
|
|
result = test_api_endpoint("/api/history", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
history_list = result["data"]["history"]
|
|||
|
|
print(f" 获取到 {len(history_list)} 条历史记录")
|
|||
|
|
|
|||
|
|
if history_list:
|
|||
|
|
first_history = history_list[0]
|
|||
|
|
print(f" 第一条记录: {first_history['original_input'][:50]}...")
|
|||
|
|
return first_history["id"]
|
|||
|
|
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def test_search_and_filter():
|
|||
|
|
"""测试搜索和筛选功能"""
|
|||
|
|
print("\n3. 测试搜索和筛选功能")
|
|||
|
|
|
|||
|
|
# 测试关键词搜索
|
|||
|
|
print("\n3.1 测试关键词搜索")
|
|||
|
|
result = test_api_endpoint("/api/history?search=人工智能", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(f" 搜索结果: {len(result['data']['history'])} 条记录")
|
|||
|
|
|
|||
|
|
# 测试模板筛选
|
|||
|
|
print("\n3.2 测试模板筛选")
|
|||
|
|
result = test_api_endpoint("/api/history?template_id=1", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(f" 模板筛选结果: {len(result['data']['history'])} 条记录")
|
|||
|
|
|
|||
|
|
# 测试收藏筛选
|
|||
|
|
print("\n3.3 测试收藏筛选")
|
|||
|
|
result = test_api_endpoint("/api/history?is_favorite=true", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(f" 收藏筛选结果: {len(result['data']['history'])} 条记录")
|
|||
|
|
|
|||
|
|
# 测试排序
|
|||
|
|
print("\n3.4 测试排序")
|
|||
|
|
result = test_api_endpoint("/api/history?sort=rating", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(f" 按评分排序结果: {len(result['data']['history'])} 条记录")
|
|||
|
|
|
|||
|
|
def test_update_history(history_id):
|
|||
|
|
"""测试更新历史记录"""
|
|||
|
|
print("\n4. 测试更新历史记录")
|
|||
|
|
|
|||
|
|
if not history_id:
|
|||
|
|
print(" 跳过测试:没有可用的历史记录ID")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
update_data = {
|
|||
|
|
"satisfaction_rating": 5,
|
|||
|
|
"is_favorite": True,
|
|||
|
|
"tags": ["AI", "技术", "分析", "重要"]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
result = test_api_endpoint(f"/api/history/{history_id}", "PUT", update_data, 200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(" 更新历史记录成功")
|
|||
|
|
print(f" 更新后评分: {result['data']['satisfaction_rating']}")
|
|||
|
|
print(f" 更新后收藏状态: {result['data']['is_favorite']}")
|
|||
|
|
else:
|
|||
|
|
print(" 更新历史记录失败")
|
|||
|
|
|
|||
|
|
def test_get_history_detail(history_id):
|
|||
|
|
"""测试获取历史记录详情"""
|
|||
|
|
print("\n5. 测试获取历史记录详情")
|
|||
|
|
|
|||
|
|
if not history_id:
|
|||
|
|
print(" 跳过测试:没有可用的历史记录ID")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
result = test_api_endpoint(f"/api/history/{history_id}", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
history = result["data"]
|
|||
|
|
print(" 获取历史记录详情成功")
|
|||
|
|
print(f" 原始输入: {history['original_input'][:50]}...")
|
|||
|
|
print(f" 生成提示词: {history['generated_prompt'][:50]}...")
|
|||
|
|
print(f" 模板名称: {history['template_name']}")
|
|||
|
|
print(f" 生成时间: {history['created_at']}")
|
|||
|
|
else:
|
|||
|
|
print(" 获取历史记录详情失败")
|
|||
|
|
|
|||
|
|
def test_statistics():
|
|||
|
|
"""测试统计功能"""
|
|||
|
|
print("\n6. 测试统计功能")
|
|||
|
|
|
|||
|
|
result = test_api_endpoint("/api/history/statistics", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
stats = result["data"]
|
|||
|
|
print(" 获取统计信息成功")
|
|||
|
|
print(f" 总生成数: {stats['total_generations']}")
|
|||
|
|
print(f" 收藏数: {stats['favorite_count']}")
|
|||
|
|
print(f" 平均评分: {stats['avg_rating']}")
|
|||
|
|
print(f" 最后生成时间: {stats['last_generation_at']}")
|
|||
|
|
else:
|
|||
|
|
print(" 获取统计信息失败")
|
|||
|
|
|
|||
|
|
def test_templates():
|
|||
|
|
"""测试模板列表"""
|
|||
|
|
print("\n7. 测试模板列表")
|
|||
|
|
|
|||
|
|
result = test_api_endpoint("/api/history/templates", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
templates = result["data"]["templates"]
|
|||
|
|
print(f" 获取模板列表成功: {len(templates)} 个模板")
|
|||
|
|
if templates:
|
|||
|
|
first_template = templates[0]
|
|||
|
|
print(f" 第一个模板: {first_template['name']}")
|
|||
|
|
else:
|
|||
|
|
print(" 获取模板列表失败")
|
|||
|
|
|
|||
|
|
def test_export():
|
|||
|
|
"""测试导出功能"""
|
|||
|
|
print("\n8. 测试导出功能")
|
|||
|
|
|
|||
|
|
# 测试JSON导出
|
|||
|
|
print("\n8.1 测试JSON导出")
|
|||
|
|
result = test_api_endpoint("/api/history/export?format=json", "GET", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(f" JSON导出成功: {result['count']} 条记录")
|
|||
|
|
else:
|
|||
|
|
print(" JSON导出失败")
|
|||
|
|
|
|||
|
|
# 测试CSV导出
|
|||
|
|
print("\n8.2 测试CSV导出")
|
|||
|
|
try:
|
|||
|
|
response = requests.get(f"{BASE_URL}/api/history/export?format=csv", timeout=10)
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
print(" CSV导出成功")
|
|||
|
|
print(f" CSV内容预览: {response.text[:100]}...")
|
|||
|
|
else:
|
|||
|
|
print(f" CSV导出失败: 状态码 {response.status_code}")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f" CSV导出失败: {str(e)}")
|
|||
|
|
|
|||
|
|
def test_batch_operations():
|
|||
|
|
"""测试批量操作"""
|
|||
|
|
print("\n9. 测试批量操作")
|
|||
|
|
|
|||
|
|
# 先获取一些历史记录ID
|
|||
|
|
result = test_api_endpoint("/api/history", "GET", expected_status=200)
|
|||
|
|
if not result or not result.get("success"):
|
|||
|
|
print(" 跳过测试:无法获取历史记录列表")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
history_list = result["data"]["history"]
|
|||
|
|
if len(history_list) < 2:
|
|||
|
|
print(" 跳过测试:历史记录数量不足")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 获取前两个记录的ID
|
|||
|
|
history_ids = [h["id"] for h in history_list[:2]]
|
|||
|
|
|
|||
|
|
# 测试批量收藏
|
|||
|
|
print("\n9.1 测试批量收藏")
|
|||
|
|
batch_data = {
|
|||
|
|
"operation": "favorite",
|
|||
|
|
"history_ids": history_ids
|
|||
|
|
}
|
|||
|
|
result = test_api_endpoint("/api/history/batch", "POST", batch_data, 200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(" 批量收藏成功")
|
|||
|
|
else:
|
|||
|
|
print(" 批量收藏失败")
|
|||
|
|
|
|||
|
|
# 测试批量取消收藏
|
|||
|
|
print("\n9.2 测试批量取消收藏")
|
|||
|
|
batch_data = {
|
|||
|
|
"operation": "unfavorite",
|
|||
|
|
"history_ids": history_ids
|
|||
|
|
}
|
|||
|
|
result = test_api_endpoint("/api/history/batch", "POST", batch_data, 200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(" 批量取消收藏成功")
|
|||
|
|
else:
|
|||
|
|
print(" 批量取消收藏失败")
|
|||
|
|
|
|||
|
|
def test_delete_history(history_id):
|
|||
|
|
"""测试删除历史记录"""
|
|||
|
|
print("\n10. 测试删除历史记录")
|
|||
|
|
|
|||
|
|
if not history_id:
|
|||
|
|
print(" 跳过测试:没有可用的历史记录ID")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
result = test_api_endpoint(f"/api/history/{history_id}", "DELETE", expected_status=200)
|
|||
|
|
if result and result.get("success"):
|
|||
|
|
print(" 删除历史记录成功")
|
|||
|
|
else:
|
|||
|
|
print(" 删除历史记录失败")
|
|||
|
|
|
|||
|
|
def test_history_page():
|
|||
|
|
"""测试历史记录页面"""
|
|||
|
|
print("\n11. 测试历史记录页面")
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
response = requests.get(f"{BASE_URL}/history", timeout=10)
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
print(" 历史记录页面访问成功")
|
|||
|
|
if "优化历史" in response.text:
|
|||
|
|
print(" 页面内容正确")
|
|||
|
|
else:
|
|||
|
|
print(" 页面内容可能有问题")
|
|||
|
|
else:
|
|||
|
|
print(f" 历史记录页面访问失败: 状态码 {response.status_code}")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f" 历史记录页面访问失败: {str(e)}")
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
"""主测试函数"""
|
|||
|
|
print("🚀 开始测试优化历史功能")
|
|||
|
|
print("="*60)
|
|||
|
|
|
|||
|
|
# 检查服务器是否运行
|
|||
|
|
try:
|
|||
|
|
response = requests.get(f"{BASE_URL}/", timeout=5)
|
|||
|
|
if response.status_code != 200:
|
|||
|
|
print("❌ 服务器未运行或无法访问")
|
|||
|
|
return
|
|||
|
|
except:
|
|||
|
|
print("❌ 无法连接到服务器,请确保服务器正在运行")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
print("✅ 服务器连接正常")
|
|||
|
|
|
|||
|
|
# 执行测试
|
|||
|
|
history_id = test_history_crud()
|
|||
|
|
test_get_history_list()
|
|||
|
|
test_search_and_filter()
|
|||
|
|
test_update_history(history_id)
|
|||
|
|
test_get_history_detail(history_id)
|
|||
|
|
test_statistics()
|
|||
|
|
test_templates()
|
|||
|
|
test_export()
|
|||
|
|
test_batch_operations()
|
|||
|
|
test_history_page()
|
|||
|
|
|
|||
|
|
# 最后删除测试数据
|
|||
|
|
if history_id:
|
|||
|
|
test_delete_history(history_id)
|
|||
|
|
|
|||
|
|
print("\n" + "="*60)
|
|||
|
|
print("🎉 优化历史功能测试完成!")
|
|||
|
|
print("="*60)
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|