test_user_standards.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. """
  2. 测试用户提供的4个标准规范
  3. 验证模糊名称匹配修复是否有效
  4. """
  5. import asyncio
  6. import sys
  7. import os
  8. # 添加项目根目录到 Python 路径
  9. current_dir = os.path.dirname(os.path.abspath(__file__))
  10. project_root = os.path.dirname(os.path.dirname(current_dir))
  11. if project_root not in sys.path:
  12. sys.path.insert(0, project_root)
  13. from utils_test.standard_new_Test.standard_service import (
  14. StandardMatchingService,
  15. MatchResultCode
  16. )
  17. async def test_user_standards():
  18. """测试用户提供的4个标准"""
  19. # 初始化服务(使用Mock数据)
  20. service = StandardMatchingService(db_pool=None)
  21. await service.initialize()
  22. # 用户提供的4个标准
  23. test_standards = [
  24. {"standard_name": "铁路桥涵设计规范", "standard_number": "TB 10002-2017"},
  25. {"standard_name": "铁路工程抗震设计规范", "standard_number": "GB 50111-2006"},
  26. {"standard_name": "铁路混凝土工程施工质量验收标准", "standard_number": "TB 10424-2018"},
  27. {"standard_name": "公路水运危险性较大工程专项施工方案编制审查规程", "standard_number": "JT/T 1495-2023"},
  28. ]
  29. print("=" * 80)
  30. print("测试用户提供的4个标准(使用Mock数据)")
  31. print("=" * 80)
  32. results = service.check_standards(test_standards)
  33. all_passed = True
  34. for i, result in enumerate(results, 1):
  35. print(f"\n【{i}】{result.original_name}")
  36. print(f" 标准号: {result.original_number}")
  37. print(f" 状态码: {result.status_code}")
  38. print(f" 处理结果: {result.process_result}")
  39. print(f" 最终结果: {result.final_result}")
  40. # 验证预期结果
  41. if i <= 3:
  42. # 前3个应该是 OK
  43. if result.status_code != MatchResultCode.OK.value:
  44. print(f" [失败] 期望 OK,实际 {result.status_code}")
  45. all_passed = False
  46. else:
  47. print(f" [通过]")
  48. else:
  49. # 第4个应该是 MISMATCH(因为Mock数据中是2024版)
  50. if result.status_code != MatchResultCode.MISMATCH.value:
  51. print(f" [失败] 期望 MISMATCH,实际 {result.status_code}")
  52. all_passed = False
  53. else:
  54. print(f" [通过]")
  55. print("\n" + "=" * 80)
  56. if all_passed:
  57. print("[成功] 所有测试通过!")
  58. else:
  59. print("[失败] 部分测试失败!")
  60. print("=" * 80)
  61. return all_passed
  62. def test_with_bookname_variations():
  63. """测试书名号变体"""
  64. from utils_test.standard_new_Test.standard_service import StandardRepository, StandardMatcher
  65. print("\n" + "=" * 80)
  66. print("测试书名号变体匹配")
  67. print("=" * 80)
  68. # 创建仓库并加载测试数据
  69. repo = StandardRepository()
  70. mock_data = [
  71. {"id": 1, "standard_name": "铁路桥涵设计规范", "standard_number": "TB 10002-2017", "validity": "XH"},
  72. ]
  73. repo.load_data(mock_data)
  74. matcher = StandardMatcher(repo)
  75. # 测试各种名称变体
  76. test_cases = [
  77. ("铁路桥涵设计规范", "TB 10002-2017", "无书名号"),
  78. ("《铁路桥涵设计规范》", "TB 10002-2017", "带书名号"),
  79. ("铁路桥涵 设计规范", "TB 10002-2017", "带空格"),
  80. ("《铁路桥涵 设计规范》", "TB 10002-2017", "带书名号和空格"),
  81. ]
  82. all_passed = True
  83. for name, number, desc in test_cases:
  84. result = matcher.match(1, name, number)
  85. status = "[OK]" if result.status_code == MatchResultCode.OK.value else "[FAIL]"
  86. print(f"\n{status} {desc}")
  87. print(f" 输入名称: {name}")
  88. print(f" 结果: {result.status_code}")
  89. if result.status_code != MatchResultCode.OK.value:
  90. all_passed = False
  91. return all_passed
  92. if __name__ == "__main__":
  93. # 运行异步测试
  94. result1 = asyncio.run(test_user_standards())
  95. # 运行书名号变体测试
  96. result2 = test_with_bookname_variations()
  97. print("\n" + "=" * 80)
  98. if result1 and result2:
  99. print("[成功] 所有测试通过!修复成功。")
  100. sys.exit(0)
  101. else:
  102. print("[警告] 部分测试失败!")
  103. sys.exit(1)