test_vanna_singleton.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. """
  2. 测试 Vanna 单例模式是否正常工作
  3. """
  4. import sys
  5. import os
  6. # 添加项目根目录到路径
  7. sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  8. def test_vanna_singleton():
  9. """测试 Vanna 单例模式"""
  10. from common.vanna_instance import get_vanna_instance, get_instance_status
  11. print("=" * 50)
  12. print("测试 Vanna 单例模式")
  13. print("=" * 50)
  14. # 检查初始状态
  15. status = get_instance_status()
  16. print(f"初始状态: {status}")
  17. # 第一次获取实例
  18. print("\n第一次获取实例...")
  19. instance1 = get_vanna_instance()
  20. print(f"实例1 ID: {id(instance1)}")
  21. print(f"实例1 类型: {type(instance1)}")
  22. # 第二次获取实例(应该是同一个)
  23. print("\n第二次获取实例...")
  24. instance2 = get_vanna_instance()
  25. print(f"实例2 ID: {id(instance2)}")
  26. print(f"实例2 类型: {type(instance2)}")
  27. # 验证是否为同一个实例
  28. is_same = instance1 is instance2
  29. print(f"\n实例是否相同: {is_same}")
  30. # 检查最终状态
  31. final_status = get_instance_status()
  32. print(f"最终状态: {final_status}")
  33. if is_same:
  34. print("\n✅ 单例模式测试通过!")
  35. else:
  36. print("\n❌ 单例模式测试失败!")
  37. return is_same
  38. def test_import_from_tools():
  39. """测试从工具文件导入是否正常"""
  40. print("\n" + "=" * 50)
  41. print("测试从工具文件导入")
  42. print("=" * 50)
  43. try:
  44. # 导入工具模块
  45. from agent.tools.sql_generation import get_vanna_instance as gen_instance
  46. from agent.tools.sql_execution import get_vanna_instance as exec_instance
  47. from agent.tools.summary_generation import get_vanna_instance as sum_instance
  48. # 获取实例
  49. instance_gen = gen_instance()
  50. instance_exec = exec_instance()
  51. instance_sum = sum_instance()
  52. print(f"SQL生成工具实例 ID: {id(instance_gen)}")
  53. print(f"SQL执行工具实例 ID: {id(instance_exec)}")
  54. print(f"摘要生成工具实例 ID: {id(instance_sum)}")
  55. # 验证是否都是同一个实例
  56. all_same = (instance_gen is instance_exec) and (instance_exec is instance_sum)
  57. if all_same:
  58. print("\n✅ 工具导入测试通过!所有工具使用同一个实例")
  59. else:
  60. print("\n❌ 工具导入测试失败!工具使用不同的实例")
  61. return all_same
  62. except Exception as e:
  63. print(f"\n❌ 导入测试异常: {str(e)}")
  64. return False
  65. if __name__ == "__main__":
  66. try:
  67. singleton_test = test_vanna_singleton()
  68. import_test = test_import_from_tools()
  69. print("\n" + "=" * 50)
  70. print("测试总结")
  71. print("=" * 50)
  72. print(f"单例模式测试: {'通过' if singleton_test else '失败'}")
  73. print(f"工具导入测试: {'通过' if import_test else '失败'}")
  74. if singleton_test and import_test:
  75. print("\n🎉 所有测试通过!Vanna 单例模式工作正常")
  76. else:
  77. print("\n⚠️ 存在测试失败,请检查实现")
  78. except Exception as e:
  79. print(f"测试执行异常: {str(e)}")
  80. import traceback
  81. traceback.print_exc()