384 lines
13 KiB
Python
384 lines
13 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
多群聊协调系统测试脚本
|
||
"""
|
||
|
||
import asyncio
|
||
import sys
|
||
import os
|
||
from datetime import datetime
|
||
|
||
# 添加项目路径
|
||
sys.path.append(os.path.join(os.path.dirname(__file__), 'src'))
|
||
|
||
from jixia.coordination.multi_chat_coordinator import (
|
||
MultiChatCoordinator, ChatType, MessagePriority, CoordinationAction
|
||
)
|
||
|
||
async def test_basic_messaging():
|
||
"""测试基本消息功能"""
|
||
print("\n🧪 测试基本消息功能")
|
||
print("=" * 50)
|
||
|
||
coordinator = MultiChatCoordinator()
|
||
|
||
# 测试正常消息发送
|
||
message1 = await coordinator.send_message(
|
||
"main_debate", "正1",
|
||
"AI投资是未来科技发展的重要驱动力",
|
||
MessagePriority.NORMAL, ["观点", "AI", "投资"]
|
||
)
|
||
print(f"✅ 消息1发送成功: {message1.id}")
|
||
|
||
message2 = await coordinator.send_message(
|
||
"main_debate", "反1",
|
||
"AI投资存在泡沫风险,需要谨慎对待",
|
||
MessagePriority.NORMAL, ["反驳", "风险", "投资"]
|
||
)
|
||
print(f"✅ 消息2发送成功: {message2.id}")
|
||
|
||
# 测试内部讨论
|
||
message3 = await coordinator.send_message(
|
||
"positive_internal", "正2",
|
||
"我们需要收集更多AI成功案例的数据",
|
||
MessagePriority.HIGH, ["策略", "数据"]
|
||
)
|
||
print(f"✅ 内部消息发送成功: {message3.id}")
|
||
|
||
return coordinator
|
||
|
||
async def test_escalation_rules():
|
||
"""测试升级规则"""
|
||
print("\n🚨 测试升级规则")
|
||
print("=" * 50)
|
||
|
||
coordinator = MultiChatCoordinator()
|
||
|
||
# 发送紧急消息,应该触发升级规则
|
||
urgent_message = await coordinator.send_message(
|
||
"main_debate", "正3",
|
||
"系统检测到异常行为,需要紧急干预",
|
||
MessagePriority.URGENT, ["紧急", "系统"]
|
||
)
|
||
print(f"🚨 紧急消息发送: {urgent_message.id}")
|
||
|
||
# 等待协调规则处理
|
||
await asyncio.sleep(0.1)
|
||
|
||
# 检查Human干预群是否收到升级消息
|
||
human_room = coordinator.chat_rooms["human_intervention"]
|
||
escalated_messages = [msg for msg in human_room.message_history
|
||
if "升级" in msg.tags]
|
||
|
||
if escalated_messages:
|
||
print(f"✅ 升级规则生效,Human干预群收到 {len(escalated_messages)} 条升级消息")
|
||
for msg in escalated_messages:
|
||
print(f" 📨 {msg.sender}: {msg.content[:100]}...")
|
||
else:
|
||
print("❌ 升级规则未生效")
|
||
|
||
return coordinator
|
||
|
||
async def test_broadcast_rules():
|
||
"""测试广播规则"""
|
||
print("\n📢 测试广播规则")
|
||
print("=" * 50)
|
||
|
||
coordinator = MultiChatCoordinator()
|
||
|
||
# 在策略会议群发送决策消息
|
||
strategy_message = await coordinator.send_message(
|
||
"strategy_meeting", "系统",
|
||
"决策:采用数据驱动的论证策略",
|
||
MessagePriority.HIGH, ["决策", "策略"]
|
||
)
|
||
print(f"📋 策略决策发送: {strategy_message.id}")
|
||
|
||
# 等待协调规则处理
|
||
await asyncio.sleep(0.1)
|
||
|
||
# 检查内部讨论群是否收到广播消息
|
||
broadcast_count = 0
|
||
for room_id, room in coordinator.chat_rooms.items():
|
||
if room.chat_type == ChatType.INTERNAL_DISCUSSION:
|
||
broadcast_messages = [msg for msg in room.message_history
|
||
if "广播" in msg.tags]
|
||
if broadcast_messages:
|
||
broadcast_count += len(broadcast_messages)
|
||
print(f"✅ {room.name} 收到 {len(broadcast_messages)} 条广播消息")
|
||
|
||
if broadcast_count > 0:
|
||
print(f"✅ 广播规则生效,总共发送 {broadcast_count} 条广播消息")
|
||
else:
|
||
print("❌ 广播规则未生效")
|
||
|
||
return coordinator
|
||
|
||
async def test_filter_rules():
|
||
"""测试过滤规则"""
|
||
print("\n🔍 测试过滤规则")
|
||
print("=" * 50)
|
||
|
||
coordinator = MultiChatCoordinator()
|
||
|
||
# 发送低质量消息
|
||
low_quality_message = await coordinator.send_message(
|
||
"main_debate", "正4",
|
||
"好的",
|
||
MessagePriority.LOW
|
||
)
|
||
print(f"📝 低质量消息发送: {low_quality_message.id}")
|
||
|
||
# 等待协调规则处理
|
||
await asyncio.sleep(0.1)
|
||
|
||
# 检查消息是否被过滤
|
||
if low_quality_message.metadata.get("filtered"):
|
||
print(f"✅ 过滤规则生效,消息被标记为已过滤")
|
||
print(f" 过滤原因: {low_quality_message.metadata.get('filter_reason')}")
|
||
else:
|
||
print("❌ 过滤规则未生效")
|
||
|
||
return coordinator
|
||
|
||
async def test_discussion_merging():
|
||
"""测试讨论合并"""
|
||
print("\n🔗 测试讨论合并")
|
||
print("=" * 50)
|
||
|
||
coordinator = MultiChatCoordinator()
|
||
|
||
# 发送相关消息
|
||
messages = [
|
||
("main_debate", "正1", "AI技术的发展速度令人惊叹", ["AI", "技术"]),
|
||
("positive_internal", "正2", "我们应该强调AI技术的创新价值", ["AI", "创新"]),
|
||
("negative_internal", "反1", "AI技术也带来了就业问题", ["AI", "就业"]),
|
||
]
|
||
|
||
sent_messages = []
|
||
for chat_id, sender, content, tags in messages:
|
||
msg = await coordinator.send_message(chat_id, sender, content, tags=tags)
|
||
sent_messages.append(msg)
|
||
print(f"📨 发送消息: {sender} - {content[:30]}...")
|
||
|
||
# 发送触发合并的消息
|
||
trigger_message = await coordinator.send_message(
|
||
"main_debate", "系统",
|
||
"需要整合关于AI技术的所有讨论",
|
||
tags=["AI", "整合"]
|
||
)
|
||
print(f"🔗 触发合并消息: {trigger_message.id}")
|
||
|
||
# 等待协调规则处理
|
||
await asyncio.sleep(0.1)
|
||
|
||
# 检查策略会议群是否收到合并摘要
|
||
strategy_room = coordinator.chat_rooms["strategy_meeting"]
|
||
merge_messages = [msg for msg in strategy_room.message_history
|
||
if "合并" in msg.tags or "摘要" in msg.tags]
|
||
|
||
if merge_messages:
|
||
print(f"✅ 讨论合并生效,策略会议群收到 {len(merge_messages)} 条摘要")
|
||
for msg in merge_messages:
|
||
print(f" 📋 摘要: {msg.content[:100]}...")
|
||
else:
|
||
print("❌ 讨论合并未生效")
|
||
|
||
return coordinator
|
||
|
||
async def test_permission_system():
|
||
"""测试权限系统"""
|
||
print("\n🔐 测试权限系统")
|
||
print("=" * 50)
|
||
|
||
coordinator = MultiChatCoordinator()
|
||
|
||
# 测试正常权限
|
||
try:
|
||
normal_message = await coordinator.send_message(
|
||
"main_debate", "正1", "这是一条正常消息"
|
||
)
|
||
print(f"✅ 正常权限测试通过: {normal_message.id}")
|
||
except Exception as e:
|
||
print(f"❌ 正常权限测试失败: {e}")
|
||
|
||
# 测试无权限用户
|
||
try:
|
||
unauthorized_message = await coordinator.send_message(
|
||
"main_debate", "未授权用户", "这是一条未授权消息"
|
||
)
|
||
print(f"❌ 权限系统失效,未授权用户发送成功: {unauthorized_message.id}")
|
||
except PermissionError as e:
|
||
print(f"✅ 权限系统正常,拒绝未授权用户: {e}")
|
||
except Exception as e:
|
||
print(f"❌ 权限系统异常: {e}")
|
||
|
||
# 测试内部群权限
|
||
try:
|
||
internal_message = await coordinator.send_message(
|
||
"positive_internal", "正2", "内部策略讨论"
|
||
)
|
||
print(f"✅ 内部群权限测试通过: {internal_message.id}")
|
||
except Exception as e:
|
||
print(f"❌ 内部群权限测试失败: {e}")
|
||
|
||
# 测试跨团队权限
|
||
try:
|
||
cross_team_message = await coordinator.send_message(
|
||
"positive_internal", "反1", "反方试图进入正方内部群"
|
||
)
|
||
print(f"❌ 跨团队权限控制失效: {cross_team_message.id}")
|
||
except PermissionError as e:
|
||
print(f"✅ 跨团队权限控制正常: {e}")
|
||
except Exception as e:
|
||
print(f"❌ 跨团队权限控制异常: {e}")
|
||
|
||
return coordinator
|
||
|
||
async def test_system_status():
|
||
"""测试系统状态"""
|
||
print("\n📊 测试系统状态")
|
||
print("=" * 50)
|
||
|
||
coordinator = MultiChatCoordinator()
|
||
|
||
# 发送一些测试消息
|
||
test_messages = [
|
||
("main_debate", "正1", "测试消息1"),
|
||
("main_debate", "反1", "测试消息2"),
|
||
("positive_internal", "正2", "内部消息1"),
|
||
("negative_internal", "反2", "内部消息2"),
|
||
("strategy_meeting", "系统", "策略消息1"),
|
||
]
|
||
|
||
for chat_id, sender, content in test_messages:
|
||
await coordinator.send_message(chat_id, sender, content)
|
||
|
||
# 获取系统状态
|
||
status = coordinator.get_chat_status()
|
||
|
||
print(f"📈 系统状态报告:")
|
||
print(f" 总群聊数: {status['total_rooms']}")
|
||
print(f" 活跃群聊数: {status['active_rooms']}")
|
||
print(f" 总消息数: {status['total_messages']}")
|
||
print(f" 待处理消息: {status['pending_messages']}")
|
||
print(f" 协调规则数: {status['coordination_rules']}")
|
||
print(f" 活跃规则数: {status['active_rules']}")
|
||
|
||
print(f"\n📋 群聊详情:")
|
||
for room_id, room_info in status['rooms'].items():
|
||
print(f" 🏠 {room_info['name']} ({room_info['type']})")
|
||
print(f" 参与者: {room_info['participants']} 人")
|
||
print(f" 消息数: {room_info['messages']}")
|
||
print(f" 活跃状态: {'✅' if room_info['is_active'] else '❌'}")
|
||
|
||
# 测试数据保存
|
||
try:
|
||
coordinator.save_coordination_data("test_coordination_data.json")
|
||
print(f"\n💾 数据保存测试通过")
|
||
except Exception as e:
|
||
print(f"\n❌ 数据保存测试失败: {e}")
|
||
|
||
return coordinator
|
||
|
||
async def test_performance():
|
||
"""测试性能"""
|
||
print("\n⚡ 测试性能")
|
||
print("=" * 50)
|
||
|
||
coordinator = MultiChatCoordinator()
|
||
|
||
# 批量发送消息测试
|
||
start_time = datetime.now()
|
||
message_count = 100
|
||
|
||
print(f"📤 发送 {message_count} 条消息...")
|
||
|
||
for i in range(message_count):
|
||
chat_id = "main_debate" if i % 2 == 0 else "positive_internal"
|
||
sender = f"测试用户{i % 4 + 1}"
|
||
if chat_id == "positive_internal":
|
||
sender = f"正{i % 4 + 1}"
|
||
|
||
content = f"性能测试消息 {i + 1}: 这是一条用于性能测试的消息内容"
|
||
|
||
try:
|
||
await coordinator.send_message(chat_id, sender, content)
|
||
except PermissionError:
|
||
# 忽略权限错误,继续测试
|
||
pass
|
||
|
||
end_time = datetime.now()
|
||
duration = (end_time - start_time).total_seconds()
|
||
|
||
print(f"⏱️ 性能测试结果:")
|
||
print(f" 总耗时: {duration:.3f} 秒")
|
||
print(f" 平均每条消息: {duration/message_count*1000:.2f} 毫秒")
|
||
print(f" 消息处理速度: {message_count/duration:.1f} 条/秒")
|
||
|
||
# 获取最终状态
|
||
final_status = coordinator.get_chat_status()
|
||
print(f" 最终消息总数: {final_status['total_messages']}")
|
||
|
||
return coordinator
|
||
|
||
async def run_all_tests():
|
||
"""运行所有测试"""
|
||
print("🚀 多群聊协调系统测试开始")
|
||
print("=" * 60)
|
||
|
||
tests = [
|
||
("基本消息功能", test_basic_messaging),
|
||
("升级规则", test_escalation_rules),
|
||
("广播规则", test_broadcast_rules),
|
||
("过滤规则", test_filter_rules),
|
||
("讨论合并", test_discussion_merging),
|
||
("权限系统", test_permission_system),
|
||
("系统状态", test_system_status),
|
||
("性能测试", test_performance),
|
||
]
|
||
|
||
results = []
|
||
|
||
for test_name, test_func in tests:
|
||
try:
|
||
print(f"\n🧪 开始测试: {test_name}")
|
||
coordinator = await test_func()
|
||
results.append((test_name, "✅ 通过", None))
|
||
print(f"✅ {test_name} 测试完成")
|
||
except Exception as e:
|
||
results.append((test_name, "❌ 失败", str(e)))
|
||
print(f"❌ {test_name} 测试失败: {e}")
|
||
|
||
# 测试结果总结
|
||
print("\n" + "=" * 60)
|
||
print("📊 测试结果总结")
|
||
print("=" * 60)
|
||
|
||
passed = 0
|
||
failed = 0
|
||
|
||
for test_name, status, error in results:
|
||
print(f"{status} {test_name}")
|
||
if error:
|
||
print(f" 错误: {error}")
|
||
|
||
if "✅" in status:
|
||
passed += 1
|
||
else:
|
||
failed += 1
|
||
|
||
print(f"\n📈 测试统计:")
|
||
print(f" 通过: {passed}")
|
||
print(f" 失败: {failed}")
|
||
print(f" 总计: {passed + failed}")
|
||
print(f" 成功率: {passed/(passed+failed)*100:.1f}%")
|
||
|
||
if failed == 0:
|
||
print("\n🎉 所有测试通过!多群聊协调系统运行正常。")
|
||
else:
|
||
print(f"\n⚠️ 有 {failed} 个测试失败,需要检查相关功能。")
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(run_all_tests()) |