creative_studio/backend/test_integration.py
2026-01-25 19:27:44 +08:00

154 lines
4.6 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
\"\"\"\"\"
"""
集成测试脚本 - 测试核心模块的集成
\"\"\"
import asyncio
import sys
import json
from pathlib import Path
# 添加项目根目录到 Python 路径
project_root = Path(__file__).parent
async def main():
"""主测试入口"""
print("=" * 50)
print("集成测试")
print()
# 测试 1: 验证 Zai-sdk 导入
print("[1/6] 测试 zai-sdk 导入...")
try:
from zai import ZhipuAiClient
print(" ✓ zai-sdk 导入成功")
except ImportError as e:
print(f" ✗ zai-sdk 导入失败: {str(e)}")
return False
# 测试 2: 验证 Skill Manager
print()
print("[2/6] 测试 Skill Manager...")
try:
from app.core.skills.skill_manager import get_skill_manager
sm = get_skill_manager()
# 测试加载 skill-creator
skill = await sm.load_skill("skill-creator")
if skill:
print(f" ✓ skill-creator 加载成功")
print(f" 名称: {skill.name}")
else:
print(" ✗ skill-creator 未找到")
# 测试获取工具列表
tools = sm.get_available_tools_for_llm()
print(f" 工具数量: {len(tools)}")
except Exception as e:
print(f" ✗ Skill Manager 测试失败: {str(e)}")
return False
# 测试 3: 验证记忆系统
print()
print("[3/6] 测试 Memory Manager...")
try:
from app.core.memory.memory_manager import get_memory_manager
mm = get_memory_manager()
# 测试事件提取
events = await mm.extract_events_from_episode(
episode_content=\"测试 EP01 内容:李云飞与苏婉儿在江南相遇,两人决定私定终身...",
episode_number=1,
characters=["李云飞", "苏婉儿"]
)
print(f" ✓ 提取 {len(events)} 个事件")
# 测试伏笔检测
foreshadowing, threads = await mm.detect_foreshadowing(
episode_content=\"测试 EP02 内容...",
episode_number=2,
existing_threads=[]
)
print(f" ✓ 检测到 {len(foreshadowing)} 个伏笔,新增 {len(threads)} 个待收线")
except Exception as e:
print(f" ✗ Memory Manager 测试失败: {str(e)}")
return False
# 测试 4: 验证审核系统
print()
print("[4/6] 测试 Review Manager...")
try:
from app.core.review.review_manager import get_review_manager
rm = get_review_manager()
# 测试维度列表
dimensions = rm.list_all_dimensions()
print(f" ✓ 审核维度: {len(dimensions)}")
except Exception as e:
print(f" ✗ Review Manager 测试失败: {str(e)}")
return False
# 测试 5: 验证批次执行
print()
print("[5/6] 测试 Batch Executor...")
try:
from app.core.execution.batch_executor import get_batch_executor
be = get_batch_executor()
print("批次执行测试...")
# 创建测试项目
from app.models.project import SeriesProject
project = SeriesProject(
id="test-project-001",
name="测试项目",
type="series",
globalContext={"worldSetting": "测试世界观"},
characterProfiles={},
sceneSettings={},
overallOutline="测试大纲",
styleGuide="测试风格",
skills={"dialogue_writer_ancient": "dialogue-writer-ancient"}
)
# 模拟批次执行
result = await be.execute_batch(
project=project,
start_episode=1,
end_episode=3,
enable_retry=False,
max_retries=1,
on_progress=lambda d: print(f" 进度: {d['progress_percentage']}"),
on_episode_complete=lambda d: print(f"{d['current_episode']} 完成")
)
print(f" ✓ 批次执行完成")
print(f" 耗分:")
print(f" 成功: {result['successful']}")
print(f" 失败: {result['failed']}")
print(f" 耗率: {result['success_rate']}")
print(f" 质量: {result.get('quality_stats', {}).get('average', 0):.1f}")
except Exception as e:
print(f" ✗ Batch Executor 测试失败: {str(e)}")
return False
print()
print("=" * 50)
print("所有测试完成!")
print()
print("说明:")
print("如果测试全部通过,说明核心模块可以正常协作。")
print("如果某些测试失败,根据错误信息修复对应模块。")
return True
if __name__ == "__main__":
asyncio.run(main())