liurenchaxin/tests/test_multi_chat_coordinatio...

384 lines
13 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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())