VWED_server/tests/test_mqtt_standalone.py

118 lines
3.5 KiB
Python
Raw Normal View History

2025-09-20 16:50:45 +08:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
MQTT服务单独测试
测试独立的MQTT服务模块
"""
import asyncio
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from services.online_script.mqtt_service import MQTTService
from datetime import datetime
import json
import time
def test_message_handler(topic: str, payload: str):
"""测试消息处理器"""
print(f"[消息处理器] 收到消息:")
print(f" 主题: {topic}")
print(f" 内容: {payload}")
print(f" 时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("-" * 50)
def test_mqtt_service():
"""测试独立MQTT服务"""
print("=== MQTT服务独立测试 ===")
# 创建MQTT服务
mqtt_service = MQTTService()
try:
# 连接到服务器
print("连接MQTT服务器...")
if mqtt_service.connect():
print("MQTT连接成功")
# 订阅主题并添加处理器
test_topics = [
"vwed/test/message",
"vwed/device/+/status",
"vwed/task/status"
]
for topic in test_topics:
mqtt_service.subscribe(topic, test_message_handler)
print(f"已订阅主题: {topic}")
# 等待订阅完成
time.sleep(2)
# 发布测试消息
print("\n发布测试消息...")
test_messages = [
{
"topic": "vwed/test/message",
"payload": {
"message": "Hello MQTT Service!",
"timestamp": datetime.now().isoformat(),
"test_id": "test_001"
}
},
{
"topic": "vwed/device/robot_001/status",
"payload": {
"device_id": "robot_001",
"status": "online",
"battery": 85,
"position": {"x": 100, "y": 200}
}
},
{
"topic": "vwed/task/status",
"payload": {
"task_id": "task_001",
"status": "running",
"progress": 75
}
}
]
for msg in test_messages:
success = mqtt_service.publish(msg["topic"], msg["payload"])
if success:
print(f"✓ 成功发布消息到: {msg['topic']}")
else:
print(f"✗ 发布消息失败: {msg['topic']}")
time.sleep(1)
# 保持连接,监听消息
print("\n保持连接30秒监听消息...")
time.sleep(30)
# 显示连接信息
print("\n=== 连接信息 ===")
info = mqtt_service.get_connection_info()
print(json.dumps(info, ensure_ascii=False, indent=2))
else:
print("MQTT连接失败")
except Exception as e:
print(f"测试过程中出错: {e}")
import traceback
traceback.print_exc()
finally:
# 断开连接
print("\n断开MQTT连接...")
mqtt_service.disconnect()
print("测试完成")
if __name__ == "__main__":
test_mqtt_service()