Files
nanocode/fumamxCRM/test_deep_analysis_full.py
T
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

206 lines
7.1 KiB
Python

"""
深度分析功能完整测试 - 测试 Ht Active Software (ID=1)
"""
import requests
import time
import sys
API_BASE = "http://129.211.173.87:10001"
def login():
"""登录获取token"""
resp = requests.post(f"{API_BASE}/auth/login", json={
"username": "admin",
"password": "abcd1234"
})
data = resp.json()
if "access_token" not in data:
print(f"❌ 登录失败: {data}")
sys.exit(1)
print(f"✅ 登录成功")
return data["access_token"]
def test_config(token):
"""测试配置接口"""
headers = {"Authorization": f"Bearer {token}"}
# 获取当前配置
resp = requests.get(f"{API_BASE}/deep-analysis/config/model", headers=headers)
print(f"\n📊 当前模型配置:")
print(f" Status: {resp.status_code}")
if resp.status_code == 200:
print(f" Config: {resp.json()}")
# 设置测试配置(使用测试API key)
resp = requests.post(f"{API_BASE}/deep-analysis/config/model",
headers=headers,
json={"model": "deepseek-chat", "api_key": "sk-test12345678"}
)
print(f"\n📝 设置测试配置:")
print(f" Status: {resp.status_code}")
if resp.status_code == 200:
print(f" Response: {resp.json()}")
def test_customer_status(token, customer_id):
"""测试获取客户分析状态"""
headers = {"Authorization": f"Bearer {token}"}
resp = requests.get(f"{API_BASE}/deep-analysis/status/{customer_id}", headers=headers)
print(f"\n🔍 客户 {customer_id} 分析状态:")
print(f" Status: {resp.status_code}")
if resp.status_code == 200:
print(f" Response: {resp.json()}")
def test_create_analysis(token, customer_id):
"""测试创建分析任务"""
headers = {"Authorization": f"Bearer {token}"}
resp = requests.post(f"{API_BASE}/deep-analysis/create",
headers=headers,
json={"customer_ids": [customer_id]}
)
print(f"\n✨ 创建分析任务 (客户ID: {customer_id}):")
print(f" Status: {resp.status_code}")
if resp.status_code == 200:
data = resp.json()
print(f" Created: {data.get('created_count', 0)} 个任务")
print(f" Skipped: {data.get('skipped_count', 0)} 个已存在")
print(f" IDs: {data.get('created_ids', [])}")
return data.get('created_ids', [])
else:
print(f" Error: {resp.text}")
return []
def test_list_analyses(token):
"""测试获取分析列表"""
headers = {"Authorization": f"Bearer {token}"}
resp = requests.get(f"{API_BASE}/deep-analysis/list?page=1&page_size=10", headers=headers)
print(f"\n📋 分析列表:")
print(f" Status: {resp.status_code}")
data = resp.json()
print(f" Total: {data.get('total', 0)}")
print(f" Items: {len(data.get('items', []))}")
if data.get('items'):
print(f" 最新分析:")
for item in data['items'][:3]:
status_icon = {
'pending': '⏳',
'processing': '🔄',
'completed': '✅',
'failed': '❌'
}.get(item['status'], '❓')
print(f" {status_icon} [{item['id']}] {item['company_name']}: {item['status']}")
return data.get('items', [])
def test_queue_status(token):
"""测试队列状态"""
headers = {"Authorization": f"Bearer {token}"}
resp = requests.get(f"{API_BASE}/deep-analysis/queue/status", headers=headers)
print(f"\n🎛️ 队列状态:")
print(f" Status: {resp.status_code}")
if resp.status_code == 200:
data = resp.json()
print(f" 队列中: {data.get('queued_count', 0)} 个")
print(f" 处理中: {'是' if data.get('is_processing') else '否'}")
if data.get('current_task'):
print(f" 当前任务: {data.get('current_task')}")
return resp.json() if resp.status_code == 200 else {}
def test_get_detail(token, analysis_id):
"""测试获取分析详情"""
headers = {"Authorization": f"Bearer {token}"}
resp = requests.get(f"{API_BASE}/deep-analysis/{analysis_id}", headers=headers)
print(f"\n📄 分析详情 (ID: {analysis_id}):")
print(f" Status: {resp.status_code}")
if resp.status_code == 200:
data = resp.json()
print(f" 公司: {data.get('company_name')}")
print(f" 状态: {data.get('status')}")
print(f" 模型: {data.get('model_used')}")
if data.get('canvas_summary'):
summary = data['canvas_summary']
print(f" 评分: {summary.get('overall_score', 'N/A')}")
print(f" 建议: {summary.get('recommendation', 'N/A')[:50]}..." if summary.get('recommendation') else " 建议: N/A")
if data.get('error_message'):
print(f" 错误: {data.get('error_message')}")
return resp.json() if resp.status_code == 200 else None
def wait_for_analysis(token, analysis_id, max_wait=60):
"""等待分析完成"""
print(f"\n⏱️ 等待分析完成 (最多 {max_wait} 秒)...")
headers = {"Authorization": f"Bearer {token}"}
for i in range(max_wait):
resp = requests.get(f"{API_BASE}/deep-analysis/{analysis_id}", headers=headers)
status = "unknown"
if resp.status_code == 200:
data = resp.json()
status = data.get('status', 'unknown')
if status == 'completed':
print(f" ✅ 分析完成!")
return True
elif status == 'failed':
print(f" ❌ 分析失败: {data.get('error_message', '未知错误')}")
return False
if i % 5 == 0:
print(f" ... 已等待 {i} 秒,状态: {status}")
time.sleep(1)
print(f" ⚠️ 超时,分析可能还在进行中")
return None
def test_cancel_queue(token):
"""测试取消队列"""
headers = {"Authorization": f"Bearer {token}"}
resp = requests.post(f"{API_BASE}/deep-analysis/queue/cancel", headers=headers)
print(f"\n🛑 取消队列:")
print(f" Status: {resp.status_code}")
if resp.status_code == 200:
print(f" Response: {resp.json()}")
def main():
print("=" * 70)
print("🧪 深度分析功能完整测试")
print("=" * 70)
# 1. 登录
token = login()
# 2. 配置
test_config(token)
# 3. 检查客户状态
test_customer_status(token, 1)
# 4. 创建分析任务
created_ids = test_create_analysis(token, 1)
if not created_ids:
print("\n⚠️ 没有创建新任务(可能已存在进行中/待处理的任务)")
# 尝试获取现有任务
items = test_list_analyses(token)
if items:
created_ids = [items[0]['id']]
# 5. 查看队列状态
test_queue_status(token)
# 6. 查看列表
test_list_analyses(token)
# 7. 等待分析完成
if created_ids:
result = wait_for_analysis(token, created_ids[0], max_wait=30)
# 8. 查看详情
test_get_detail(token, created_ids[0])
# 9. 最终队列状态
test_queue_status(token)
print("\n" + "=" * 70)
print("🎉 测试完成!")
print("=" * 70)
if __name__ == "__main__":
main()