Files
GX-gp-notify/test_wechat_menu.py
T

169 lines
5.9 KiB
Python

#!/usr/bin/env python3
"""
测试企业微信菜单功能
"""
import sys
import os
# 添加项目路径
sys.path.insert(0, os.path.dirname(__file__))
try:
from gx_gp_monitor.wechat.menu_manager import WeChatMenuManager
from gx_gp_monitor.wechat.message_handler import WeChatMessageHandler
from gx_gp_monitor.core.config_manager import load_config
def test_menu_manager():
"""测试菜单管理器"""
print("🧪 测试菜单管理器...")
try:
# 加载配置
load_config()
# 创建菜单管理器
menu_manager = WeChatMenuManager()
# 测试菜单信息获取
menu_info = menu_manager.get_menu_info()
print("✅ 菜单信息获取成功")
print(f" 菜单按钮数量: {menu_info['menu_structure']['total_buttons']}")
# 打印菜单结构
for button in menu_info['menu_structure']['buttons']:
sub_count = len(button.get('sub_buttons', [])) if isinstance(button.get('sub_buttons'), list) else button.get('sub_buttons', 0)
print(f" • {button['name']} ({sub_count}个子菜单)")
return True
except Exception as e:
print(f"❌ 菜单管理器测试失败: {str(e)}")
return False
def test_message_handler():
"""测试消息处理器"""
print("🧪 测试消息处理器...")
try:
# 创建消息处理器
handler = WeChatMessageHandler()
# 测试各种菜单功能
test_results = {}
# 测试帮助功能
result = handler._handle_help_guide("test_user")
test_results["help_guide"] = result is not None and "广西政府采购网" in result
# 测试联系信息
result = handler._handle_contact_info("test_user")
test_results["contact_info"] = result is not None and "联系我们" in result
# 测试关于系统
result = handler._handle_about_system("test_user")
test_results["about_system"] = result is not None and "关于系统" in result
# 测试关键词搜索菜单
result = handler._handle_keyword_search_menu("test_user")
test_results["keyword_search"] = result is not None and "关键词搜索" in result
# 打印测试结果
success_count = sum(1 for success in test_results.values() if success)
print(f"✅ 消息处理器测试完成: {success_count}/{len(test_results)} 项通过")
for func_name, success in test_results.items():
status = "✅" if success else "❌"
print(f" {status} {func_name}")
return success_count == len(test_results)
except Exception as e:
print(f"❌ 消息处理器测试失败: {str(e)}")
return False
def test_menu_structure():
"""测试菜单结构合理性"""
print("🧪 测试菜单结构...")
try:
menu_manager = WeChatMenuManager()
menu_data = menu_manager.menu_data
# 检查菜单结构
checks = {
"has_buttons": len(menu_data.get("button", [])) > 0,
"max_buttons": len(menu_data.get("button", [])) <= 3, # 企业微信最多3个一级菜单
"has_sub_buttons": all("sub_button" in btn for btn in menu_data.get("button", [])),
"sub_buttons_limit": all(len(btn.get("sub_button", [])) <= 5 for btn in menu_data.get("button", [])),
"valid_keys": True
}
# 检查所有按钮都有有效的key
all_keys = []
for button in menu_data.get("button", []):
for sub_btn in button.get("sub_button", []):
key = sub_btn.get("key")
if key:
all_keys.append(key)
else:
checks["valid_keys"] = False
# 检查key唯一性
checks["unique_keys"] = len(all_keys) == len(set(all_keys))
# 打印检查结果
success_count = sum(1 for success in checks.values() if success)
print(f"✅ 菜单结构检查完成: {success_count}/{len(checks)} 项通过")
for check_name, success in checks.items():
status = "✅" if success else "❌"
print(f" {status} {check_name}")
return success_count == len(checks)
except Exception as e:
print(f"❌ 菜单结构测试失败: {str(e)}")
return False
def main():
"""主测试函数"""
print("🚀 开始测试企业微信菜单功能...")
print("=" * 60)
# 测试菜单管理器
test1_passed = test_menu_manager()
print()
# 测试消息处理器
test2_passed = test_message_handler()
print()
# 测试菜单结构
test3_passed = test_menu_structure()
print()
print("=" * 60)
# 总体结果
all_passed = test1_passed and test2_passed and test3_passed
if all_passed:
print("🎉 所有测试通过!企业微信菜单功能正常")
print("💡 您可以运行以下命令创建菜单:")
print(" python -c \"from gx_gp_monitor.wechat.menu_manager import WeChatMenuManager; m = WeChatMenuManager(); m.create_menu()\"")
else:
print("⚠️ 部分测试失败,请检查上述错误信息")
return all_passed
if __name__ == "__main__":
main()
except ImportError as e:
print(f"❌ 导入失败: {e}", file=sys.stderr)
print("请确保已安装所有依赖: pip install -r gx_gp_monitor/requirements.txt", file=sys.stderr)
sys.exit(1)
except Exception as e:
print(f"❌ 测试失败: {e}", file=sys.stderr)
sys.exit(1)