""" 测试RequestContext功能的简单脚本 """ import sys import os # 添加项目根目录到Python路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from context import RequestContext, RequestContextStage, create_request_context def test_basic_context_functionality(): """测试基本的context功能""" print("=== 测试基本RequestContext功能 ===") # 创建context context = create_request_context("test123", "user456") print(f"Request ID: {context.reqid}") print(f"User ID: {context.uid}") # 测试阶段计时 context.start_stage(RequestContextStage.QUERY_PARSING) import time time.sleep(0.1) # 模拟工作 duration = context.end_stage(RequestContextStage.QUERY_PARSING) print(f"查询解析阶段耗时: {duration:.2f}ms") # 测试存储查询分析结果 context.store_query_analysis( original_query="iphone 13", normalized_query="iphone 13", rewritten_query="apple iphone 13", detected_language="en" ) # 测试存储中间结果 context.store_intermediate_result('test_key', {'test': 'value'}) # 获取摘要 summary = context.get_summary() print("Context摘要:") print(f" - 原始查询: {summary['query_analysis']['original_query']}") print(f" - 检测语言: {summary['query_analysis']['detected_language']}") print(f" - 阶段耗时: {summary['performance']['stage_timings_ms']}") print("✅ 基本功能测试通过\n") def test_context_as_context_manager(): """测试context作为上下文管理器的功能""" print("=== 测试上下文管理器功能 ===") # 使用上下文管理器 with create_request_context("cm123", "user789") as context: context.start_stage(RequestContextStage.QUERY_PARSING) import time time.sleep(0.05) context.end_stage(RequestContextStage.QUERY_PARSING) context.start_stage(RequestContextStage.QUERY_BUILDING) time.sleep(0.03) context.end_stage(RequestContextStage.QUERY_BUILDING) print(f"Context ID: {context.reqid}") # 退出时会自动记录性能摘要 print("✅ 上下文管理器测试通过\n") def test_error_handling(): """测试错误处理功能""" print("=== 测试错误处理功能 ===") context = create_request_context("error123") # 设置错误 try: raise ValueError("这是一个测试错误") except Exception as e: context.set_error(e) print(f"有错误: {context.has_error()}") print(f"错误信息: {context.metadata['error_info']}") print("✅ 错误处理测试通过\n") def test_performance_summary(): """测试性能摘要功能""" print("=== 测试性能摘要功能 ===") context = create_request_context("perf123") # 模拟多个阶段 stages = [ RequestContextStage.QUERY_PARSING, RequestContextStage.BOOLEAN_PARSING, RequestContextStage.QUERY_BUILDING, RequestContextStage.ELASTICSEARCH_SEARCH, RequestContextStage.RESULT_PROCESSING ] import time durations = [50, 20, 80, 150, 30] # 模拟各阶段耗时(ms) for stage, expected_duration in zip(stages, durations): context.start_stage(stage) time.sleep(expected_duration / 1000.0) # 转换为秒 context.end_stage(stage) # 设置总耗时 context.performance_metrics.total_duration = sum(durations) # 计算百分比 percentages = context.calculate_stage_percentages() print("各阶段耗时占比:") for stage, percentage in percentages.items(): print(f" - {stage}: {percentage}%") print("✅ 性能摘要测试通过\n") if __name__ == "__main__": print("开始测试RequestContext功能...\n") test_basic_context_functionality() test_context_as_context_manager() test_error_handling() test_performance_summary() print("🎉 所有测试通过!RequestContext功能正常。")