survey/test_report_generator.py
2025-11-24 15:09:22 +08:00

117 lines
4.2 KiB
Python
Raw Permalink 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
# -*- coding: utf-8 -*-
"""
测试修改后的 ReportGenerator 类
"""
import os
import sys
import asyncio
import json
# 添加当前目录到 Python 路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from enhanced_survey_system import ReportGenerator
async def test_report_generator():
"""测试报告生成器"""
print("🧪 开始测试 ReportGenerator...")
# 检查环境变量
if not os.getenv("GLM_API_KEY") or os.getenv("GLM_API_KEY") == "YOUR_API_KEY":
print("❌ 错误: 请在 .env 文件中设置正确的 GLM_API_KEY")
return False
try:
# 创建报告生成器实例
generator = ReportGenerator()
print("✅ ReportGenerator 实例创建成功")
# 测试加载提示词
prompt = generator.load_prompt()
print(f"✅ 提示词加载成功,长度: {len(prompt)} 字符")
# 创建测试数据
test_session_id = "test_session_123"
test_analysis_data = {
'analysis_text': '''# 考试答题情况分析
## 总分85 分
| 题目 | 题型 | 用户答案 | 正确答案 | 是否正确 | 得分 |
|------|------|----------|----------|----------|------|
| 姓名 | 填空题 | 张三 | 无标准答案 | 无法判断 | 不适用 |
| 学校 | 填空题 | 测试小学 | 无标准答案 | 无法判断 | 不适用 |
| 年级 | 填空题 | 五年级 | 无标准答案 | 无法判断 | 不适用 |
| 考试标签 | 填空题 | 科学测试 | 无标准答案 | 无法判断 | 不适用 |
| 水在自然界中的三种状态 | 单选题 | 气体、液体、固体 | 气体、液体、固体 | ✓ | 20 |
| 植物的光合作用需要 | 单选题 | 阳光 | 阳光和水 | ✗ | 0 |
| 地球的自转导致 | 单选题 | 白天黑夜 | 白天黑夜 | ✓ | 20 |''',
'student_info': {
'name': '张三',
'school': '测试小学',
'grade': '五年级'
},
'answers': [
{
'questionText': '水在自然界中的三种状态',
'questionType': '单选题',
'userAnswer': '气体、液体、固体',
'correctAnswer': '气体、液体、固体',
'isCorrect': True,
'score': 20
},
{
'questionText': '植物的光合作用需要',
'questionType': '单选题',
'userAnswer': '阳光',
'correctAnswer': '阳光和水',
'isCorrect': False,
'score': 0
}
]
}
print("📝 准备调用 GLM API...")
# 调用 API 生成报告
result = generator.call_report_api(test_analysis_data, test_session_id)
if result.get('success'):
print("✅ API 调用成功!")
print(f"📊 报告数据类型: {type(result.get('report_data'))}")
print(f"📊 原始响应长度: {len(result.get('raw_response', ''))} 字符")
# 显示报告数据的前500个字符
report_data = result.get('report_data', '')
if isinstance(report_data, str):
print(f"📄 报告内容预览:\n{report_data[:500]}...")
else:
print(f"📄 报告数据: {json.dumps(report_data, ensure_ascii=False, indent=2)[:500]}...")
return True
else:
print(f"❌ API 调用失败: {result.get('error', '未知错误')}")
return False
except Exception as e:
print(f"❌ 测试过程中发生错误: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
print("=" * 60)
print("ReportGenerator 测试")
print("=" * 60)
success = asyncio.run(test_report_generator())
print("=" * 60)
if success:
print("🎉 测试通过!")
else:
print("💥 测试失败!")
print("=" * 60)