#!/usr/bin/env python # -*- coding: utf-8 -*- """ 测试TopicParser组件 该脚本演示如何独立使用topic_parser模块解析JSON格式的选题数据。 """ import os import sys import json import time from pathlib import Path # 将项目根目录添加到PATH project_root = str(Path(__file__).parent.parent.absolute()) if project_root not in sys.path: sys.path.append(project_root) from core.topic_parser import TopicParser def get_test_json(): """返回测试用的选题JSON数据""" return ''' [ { "index": 1, "date": "2024-05-30", "logic": "这是一个著名的景点,有丰富的历史文化底蕴,适合文化和历史爱好者。", "object": "泰宁古城", "product": "文化体验套票.txt", "product_logic": "泰宁古城有多处明清古建筑,游客可以通过体验套票更全面了解当地历史文化。", "style": "人文历史.txt", "style_logic": "古城拥有800多年历史,古建筑保存完好,适合人文历史风格。", "target_audience": "家庭游客.txt", "target_audience_logic": "古城内有适合家庭参观的展览和互动活动,老人孩子都能找到感兴趣的内容。" }, { "index": 2, "date": "2024-05-30", "logic": "这是一个自然景观与历史文化相结合的景点,适合各类游客。", "object": "甘露岩寺", "product": "亲子研学.txt", "product_logic": "甘露岩寺建筑结构特殊,可作为建筑研学的典型案例。", "style": "摄影指南.txt", "style_logic": "寺庙依山而建,视角独特,适合摄影爱好者拍摄。", "target_audience": "亲子游.txt", "target_audience_logic": "有趣的建筑结构和历史故事适合亲子游客探索学习。" } ] ''' def get_invalid_json(): """返回格式不正确的JSON数据进行测试""" return ''' { "topics": [ {"name": "泰宁古城", "description": "这是一个测试"}, {"name": "甘露岩寺", "description": "这是另一个测试"} ] } ''' def get_malformed_json(): """返回格式错误的JSON字符串""" return ''' [ { "index": 1, "date": "2024-05-30", "object": "泰宁古城" }, { "index": 2 "date": "2024-05-30", // 缺少逗号 "object": "甘露岩寺" } ] ''' def main(): """主函数""" print("=== 测试 TopicParser 组件 ===") # 测试1: 解析有效的JSON print("\n测试1: 解析有效的JSON数据") start_time = time.time() valid_json = get_test_json() print(f"输入JSON数据 ({len(valid_json)} 字节):\n{valid_json[:200]}...") try: topics = TopicParser.parse_topics(valid_json) elapsed = time.time() - start_time if topics: print(f"成功解析! 解析到 {len(topics)} 个选题,耗时: {elapsed:.4f}秒") print("\n解析结果:") for i, topic in enumerate(topics): print(f"\n选题 {i+1}:") print(f" 对象: {topic.get('object', 'N/A')}") print(f" 样式: {topic.get('style', 'N/A')}") print(f" 目标受众: {topic.get('target_audience', 'N/A')}") else: print("解析失败: 未返回选题列表") except Exception as e: print(f"解析出错: {e}") # 测试2: 解析无效结构的JSON print("\n测试2: 解析结构无效的JSON数据") invalid_json = get_invalid_json() print(f"输入无效结构JSON:\n{invalid_json}") try: topics = TopicParser.parse_topics(invalid_json) if topics: print(f"注意: 成功解析了 {len(topics)} 个选题(预期应该失败)") else: print("测试通过: 正确地未能解析无效结构") except Exception as e: print(f"捕获到异常 (预期行为): {e}") # 测试3: 格式错误的JSON print("\n测试3: 解析格式错误的JSON") malformed_json = get_malformed_json() print(f"输入格式错误JSON:\n{malformed_json}") try: topics = TopicParser.parse_topics(malformed_json) if topics: print(f"注意: 成功解析了 {len(topics)} 个选题(预期应该失败)") else: print("测试通过: 正确地未能解析格式错误JSON") except Exception as e: print(f"捕获到异常 (预期行为): {e}") # 测试4: 直接解析字典对象 print("\n测试4: 直接解析Python字典对象") try: # 将JSON字符串转换为Python对象 topic_list = json.loads(get_test_json()) # 测试直接传递Python对象 topics = TopicParser.parse_topics(topic_list) if topics: print(f"成功解析! 解析到 {len(topics)} 个选题") print("测试通过: 可以接受Python对象作为输入") else: print("解析失败: 未返回选题列表") except Exception as e: print(f"解析出错: {e}") print("\n=== 测试完成 ===") if __name__ == "__main__": main()