141 lines
4.7 KiB
Python
141 lines
4.7 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
"""
|
||
|
测试修复后的统计方法
|
||
|
"""
|
||
|
|
||
|
import sys
|
||
|
import os
|
||
|
|
||
|
# 添加项目路径
|
||
|
current_dir = os.path.dirname(__file__)
|
||
|
suw_core_dir = os.path.dirname(current_dir)
|
||
|
blenderpython_dir = os.path.dirname(suw_core_dir)
|
||
|
sys.path.insert(0, blenderpython_dir)
|
||
|
|
||
|
|
||
|
def test_all_stats():
|
||
|
"""测试所有统计方法"""
|
||
|
print("📊 测试修复后的统计方法...")
|
||
|
|
||
|
try:
|
||
|
from suw_core import get_all_stats
|
||
|
|
||
|
stats = get_all_stats()
|
||
|
|
||
|
print(f"\n📋 get_all_stats 返回 {len(stats)} 个统计项:")
|
||
|
|
||
|
success_count = 0
|
||
|
for name, stat in stats.items():
|
||
|
if name == 'module_version':
|
||
|
print(f"✅ {name}: {stat}")
|
||
|
success_count += 1
|
||
|
elif stat and isinstance(stat, dict) and 'manager_type' in stat:
|
||
|
manager_type = stat['manager_type']
|
||
|
error = stat.get('error')
|
||
|
if error:
|
||
|
print(f"⚠️ {name}: {manager_type} (有错误: {error})")
|
||
|
else:
|
||
|
print(f"✅ {name}: {manager_type}")
|
||
|
success_count += 1
|
||
|
elif stat and isinstance(stat, dict):
|
||
|
print(f"⚠️ {name}: 有数据但缺少 manager_type")
|
||
|
elif stat:
|
||
|
print(f"⚠️ {name}: 格式不标准 ({type(stat)})")
|
||
|
else:
|
||
|
print(f"❌ {name}: 无数据")
|
||
|
|
||
|
print(
|
||
|
f"\n📈 统计方法成功率: {success_count}/{len(stats)} ({success_count/len(stats)*100:.1f}%)")
|
||
|
|
||
|
return success_count >= len(stats) * 0.8 # 80% 成功算合格
|
||
|
|
||
|
except Exception as e:
|
||
|
print(f"❌ 统计测试失败: {e}")
|
||
|
import traceback
|
||
|
traceback.print_exc()
|
||
|
return False
|
||
|
|
||
|
|
||
|
def test_individual_managers():
|
||
|
"""测试单个管理器的统计方法"""
|
||
|
print("\n🔍 测试单个管理器...")
|
||
|
|
||
|
try:
|
||
|
# 初始化所有管理器
|
||
|
from suw_core import init_all_managers
|
||
|
|
||
|
class MockSUWImpl:
|
||
|
def __init__(self):
|
||
|
self.parts = {}
|
||
|
self.zones = {}
|
||
|
|
||
|
mock_suw_impl = MockSUWImpl()
|
||
|
managers = init_all_managers(mock_suw_impl)
|
||
|
|
||
|
# 测试每个管理器的统计方法
|
||
|
manager_tests = [
|
||
|
('material_manager', 'get_material_stats'),
|
||
|
('part_creator', 'get_part_creator_stats'),
|
||
|
('machining_manager', 'get_machining_stats'),
|
||
|
('selection_manager', 'get_selection_stats'),
|
||
|
('deletion_manager', 'get_deletion_stats'),
|
||
|
('hardware_manager', 'get_hardware_stats'),
|
||
|
('door_drawer_manager', 'get_door_drawer_stats'),
|
||
|
('dimension_manager', 'get_dimension_stats'),
|
||
|
('command_dispatcher', 'get_dispatcher_stats'),
|
||
|
]
|
||
|
|
||
|
success_count = 0
|
||
|
for manager_name, stats_method in manager_tests:
|
||
|
manager = managers.get(manager_name)
|
||
|
if manager and hasattr(manager, stats_method):
|
||
|
try:
|
||
|
stats = getattr(manager, stats_method)()
|
||
|
if isinstance(stats, dict) and 'manager_type' in stats:
|
||
|
print(f"✅ {manager_name}: {stats['manager_type']}")
|
||
|
success_count += 1
|
||
|
else:
|
||
|
print(f"⚠️ {manager_name}: 方法存在但格式不对")
|
||
|
except Exception as e:
|
||
|
print(f"❌ {manager_name}: 方法调用失败 - {e}")
|
||
|
else:
|
||
|
print(f"❌ {manager_name}: 管理器不存在或缺少统计方法")
|
||
|
|
||
|
print(f"\n📈 单个管理器测试: {success_count}/{len(manager_tests)} 成功")
|
||
|
|
||
|
return success_count >= len(manager_tests) * 0.8
|
||
|
|
||
|
except Exception as e:
|
||
|
print(f"❌ 单个管理器测试失败: {e}")
|
||
|
return False
|
||
|
|
||
|
|
||
|
def main():
|
||
|
"""主测试函数"""
|
||
|
print("🚀 测试修复后的统计方法...")
|
||
|
print("="*60)
|
||
|
|
||
|
# 1. 测试全局统计
|
||
|
all_stats_ok = test_all_stats()
|
||
|
|
||
|
# 2. 测试单个管理器
|
||
|
individual_ok = test_individual_managers()
|
||
|
|
||
|
print("\n" + "="*60)
|
||
|
print("📋 修复验证总结:")
|
||
|
print(f" 全局统计: {'✅ 正常' if all_stats_ok else '❌ 有问题'}")
|
||
|
print(f" 单个管理器: {'✅ 正常' if individual_ok else '❌ 有问题'}")
|
||
|
|
||
|
if all_stats_ok and individual_ok:
|
||
|
print("\n🎉 统计方法修复验证成功!")
|
||
|
print("💡 现在可以在客户端中运行 show_module_status() 查看完整状态")
|
||
|
return True
|
||
|
else:
|
||
|
print("\n⚠️ 还有统计方法需要修复")
|
||
|
return False
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|