| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import asyncio
- import sys
- import os
- from pathlib import Path
- # 添加项目根目录到Python路径
- current_dir = Path(__file__).parent.absolute()
- project_root = current_dir.parent.parent
- sys.path.insert(0, str(project_root))
- os.chdir(str(project_root))
- from core.construction_review.component.ai_review_engine import AIReviewEngine
- class TestOutlineCheck:
- """大纲审查功能测试类"""
- def __init__(self):
- self.ai_review_engine = None
- def setup(self):
- """设置测试环境"""
- try:
- self.ai_review_engine = AIReviewEngine()
- print("AI审查引擎初始化成功")
- except Exception as e:
- print(f"AI审查引擎初始化失败: {str(e)}")
- def get_test_outline_data(self):
- """获取测试大纲数据"""
- return {
- "outline": {
- "chapters": [
- {
- "index": 1,
- "title": "第一章编制依据",
- "page": "5",
- "original": "第一章编制依据......5",
- "subsections": [
- {
- "title": "一、编制依据",
- "page": "5",
- "level": 2,
- "original": "一、编制依据......5"
- },
- {
- "title": "二、编制原则",
- "page": "7",
- "level": 2,
- "original": "二、编制原则......7"
- },
- {
- "title": "三、编制范围",
- "page": "7",
- "level": 2,
- "original": "三、编制范围......7"
- }
- ]
- },
- {
- "index": 2,
- "title": "第二章工程概况",
- "page": "9",
- "original": "第二章工程概况......9",
- "subsections": [
- {
- "title": "一、项目背景",
- "page": "9",
- "level": 2,
- "original": "一、项目背景......9"
- },
- {
- "title": "二、工程特点",
- "page": "10",
- "level": 2,
- "original": "二、工程特点......10"
- }
- ]
- },
- {
- "index": 3,
- "title": "第三章施工计划",
- "page": "15",
- "original": "第三章施工计划......15",
- "subsections": [
- {
- "title": "一、施工进度计划",
- "page": "15",
- "level": 2,
- "original": "一、施工进度计划......15"
- }
- ]
- }
- ],
- "total_chapters": 3
- }
- }
- def get_empty_outline_data(self):
- """获取空大纲测试数据"""
- return {
- "outline": {
- "chapters": [],
- "total_chapters": 0
- }
- }
- def get_malformed_outline_data(self):
- """获取格式错误的大纲测试数据"""
- return {
- "outline": {
- "chapters": [
- {
- "title": "第一章编制依据"
- # 缺少必要字段
- }
- ]
- }
- }
- async def test_outline_check_method(self):
- """测试outline_check方法的大纲提取功能"""
- print("\n=== 测试outline_check方法 ===")
- if not self.ai_review_engine:
- print("AI审查引擎未初始化,跳过测试")
- return False
- test_data = self.get_test_outline_data()
- print("输入大纲章节数量:", len(test_data.get('outline', {}).get('chapters', [])))
- try:
- # 调用outline_check方法
- result = await self.ai_review_engine.outline_check(
- trace_id_idx="test_outline_001",
- outline_content=test_data,
- state={},
- stage_name="大纲审查测试"
- )
- print("outline_check方法调用成功")
- print(f"返回结果类型: {type(result)}")
- # 检查返回结果并输出提取的大纲内容
- if result and isinstance(result, dict):
- print("返回结果的键:", list(result.keys()))
- # 输出整体大纲
- if 'overall_outline' in result:
- print("\n=== 整体大纲提取结果 ===")
- print(result['overall_outline'])
- print(f"整体大纲长度: {len(result['overall_outline'])}")
- # 输出详细大纲
- if 'detailed_outline' in result:
- print("\n=== 详细大纲提取结果 ===")
- print(result['overall_outline'])
- print(f"详细大纲长度: {len(result['detailed_outline'])}")
- # 输出审查结果信息
- if 'review_result' in result:
- print(f"\n=== 审查结果信息 ===")
- print(f"审查结果类型: {type(result['review_result'])}")
- if result['review_result']:
- print(f"审查结果键: {list(result['review_result'].keys()) if isinstance(result['review_result'], dict) else '非字典类型'}")
- else:
- print("审查结果为None")
- else:
- print("注意: 返回结果为None或非字典类型")
- print("PASS outline_check方法测试通过")
- return True
- except Exception as e:
- print(f"FAIL outline_check方法测试失败: {str(e)}")
- return False
- def test_outline_check_sync(self):
- """同步版本的outline_check测试"""
- print("\n=== 测试outline_check同步调用 ===")
- try:
- # 使用asyncio.run来运行异步方法
- result = asyncio.run(self.test_outline_check_method())
- return result
- except Exception as e:
- print(f"FAIL 同步调用测试失败: {str(e)}")
- return False
- def test_empty_outline(self):
- """测试空大纲处理"""
- print("\n=== 测试空大纲处理 ===")
- test_data = self.get_empty_outline_data()
- chapters = test_data.get('outline', {}).get('chapters', [])
- # 模拟提取逻辑
- overall_outline = ""
- for chapter in chapters:
- overall_outline += f"{chapter['title']} (页码: {chapter['page']})\n"
- detailed_outline = ""
- for chapter in chapters:
- detailed_outline += f"\n=== {chapter['title']} ===\n"
- detailed_outline += f"页码: {chapter['page']}\n"
- print("空大纲提取结果:")
- print(f"整体大纲长度: {len(overall_outline)}")
- print(f"详细大纲长度: {len(detailed_outline)}")
- success = len(overall_outline) == 0 and len(detailed_outline) == 0
- if success:
- print("PASS 空大纲处理测试通过")
- else:
- print("FAIL 空大纲处理测试失败")
- return success
- def test_malformed_outline(self):
- """测试格式错误大纲的处理"""
- print("\n=== 测试格式错误大纲处理 ===")
- test_data = self.get_malformed_outline_data()
- chapters = test_data.get('outline', {}).get('chapters', [])
- try:
- # 模拟提取逻辑,应该能处理缺失字段
- overall_outline = ""
- for chapter in chapters:
- title = chapter.get('title', '未知标题')
- page = chapter.get('page', '未知页码')
- overall_outline += f"{title} (页码: {page})\n"
- print("格式错误大纲处理结果:")
- print(overall_outline)
- print("PASS 格式错误大纲处理测试通过")
- return True
- except Exception as e:
- print(f"FAIL 格式错误大纲处理测试失败: {str(e)}")
- return False
-
- def run_all_tests(self):
- """运行所有测试"""
- print("开始大纲审查功能测试")
- print("=" * 50)
- # 设置测试环境
- self.setup()
- # 运行测试
- test_results = []
- # 主要测试:调用outline_check方法
- test_results.append(self.test_outline_check_sync())
- # 辅助测试:测试边界情况
- test_results.append(self.test_empty_outline())
- test_results.append(self.test_malformed_outline())
- # 统计测试结果
- passed = sum(test_results)
- total = len(test_results)
- print("\n" + "=" * 50)
- print(f"测试完成: {passed}/{total} 通过")
- if passed == total:
- print("PASS 所有测试通过")
- else:
- print(f"FAIL {total - passed} 个测试失败")
- return passed == total
- def main():
- """主函数"""
- tester = TestOutlineCheck()
- success = tester.run_all_tests()
- sys.exit(0 if success else 1)
- if __name__ == "__main__":
- main()
|