优化项目架构
This commit is contained in:
242
SproutFarm-Backend/test/test_game_tips_integration.py
Normal file
242
SproutFarm-Backend/test/test_game_tips_integration.py
Normal file
@@ -0,0 +1,242 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
游戏小提示配置系统集成测试
|
||||
测试完整的配置流程:数据库 -> 服务端 -> 客户端请求 -> 配置应用
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import threading
|
||||
import socket
|
||||
import json
|
||||
|
||||
# 添加当前目录到Python路径
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from SMYMongoDBAPI import SMYMongoDBAPI
|
||||
from TCPGameServer import TCPGameServer
|
||||
|
||||
def test_database_config():
|
||||
"""测试数据库配置"""
|
||||
print("=== 测试数据库配置 ===")
|
||||
|
||||
try:
|
||||
# 连接数据库
|
||||
mongo_api = SMYMongoDBAPI(environment="test")
|
||||
|
||||
if not mongo_api.is_connected():
|
||||
print("❌ 数据库连接失败")
|
||||
return False
|
||||
|
||||
# 获取游戏小提示配置
|
||||
config = mongo_api.get_game_tips_config()
|
||||
|
||||
if config:
|
||||
print("✓ 成功获取游戏小提示配置:")
|
||||
print(f" 切换模式: {config.get('切换模式', '未设置')}")
|
||||
print(f" 切换速度: {config.get('切换速度', '未设置')}")
|
||||
print(f" 游戏小提示数量: {len(config.get('游戏小提示', []))}")
|
||||
|
||||
tips = config.get('游戏小提示', [])
|
||||
if tips:
|
||||
print(" 前3条小提示:")
|
||||
for i, tip in enumerate(tips[:3], 1):
|
||||
print(f" {i}. {tip}")
|
||||
|
||||
mongo_api.disconnect()
|
||||
return True
|
||||
else:
|
||||
print("❌ 未找到游戏小提示配置")
|
||||
mongo_api.disconnect()
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 数据库测试失败: {e}")
|
||||
return False
|
||||
|
||||
def test_server_config_loading():
|
||||
"""测试服务端配置加载"""
|
||||
print("\n=== 测试服务端配置加载 ===")
|
||||
|
||||
try:
|
||||
# 初始化游戏服务器
|
||||
server = TCPGameServer(server_host="localhost", server_port=0)
|
||||
|
||||
if not server.mongo_api or not server.mongo_api.is_connected():
|
||||
print("❌ 服务器MongoDB连接失败")
|
||||
return False
|
||||
|
||||
print("✓ 服务器成功连接到MongoDB数据库")
|
||||
|
||||
# 测试配置加载
|
||||
config = server._load_game_tips_config()
|
||||
|
||||
if config:
|
||||
print("✓ 服务器成功加载游戏小提示配置:")
|
||||
print(f" 切换模式: {config.get('切换模式', '未设置')}")
|
||||
print(f" 切换速度: {config.get('切换速度', '未设置')}")
|
||||
print(f" 游戏小提示数量: {len(config.get('游戏小提示', []))}")
|
||||
|
||||
tips = config.get('游戏小提示', [])
|
||||
if tips:
|
||||
print(" 前3条小提示:")
|
||||
for i, tip in enumerate(tips[:3], 1):
|
||||
print(f" {i}. {tip}")
|
||||
|
||||
server.mongo_api.disconnect()
|
||||
print("✓ 服务器已断开MongoDB数据库连接")
|
||||
return True
|
||||
else:
|
||||
print("❌ 服务器加载游戏小提示配置失败")
|
||||
server.mongo_api.disconnect()
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 服务端测试失败: {e}")
|
||||
return False
|
||||
|
||||
def test_client_server_communication():
|
||||
"""测试客户端-服务端通信"""
|
||||
print("\n=== 测试客户端-服务端通信 ===")
|
||||
|
||||
server = None
|
||||
client_socket = None
|
||||
|
||||
try:
|
||||
# 启动服务器(使用固定端口进行测试)
|
||||
test_port = 17070
|
||||
server = TCPGameServer(server_host="localhost", server_port=test_port)
|
||||
|
||||
if not server.mongo_api or not server.mongo_api.is_connected():
|
||||
print("❌ 服务器MongoDB连接失败")
|
||||
return False
|
||||
|
||||
# 在新线程中启动服务器
|
||||
server_thread = threading.Thread(target=server.start, daemon=True)
|
||||
server_thread.start()
|
||||
|
||||
# 等待服务器启动
|
||||
time.sleep(1)
|
||||
|
||||
# 获取服务器端口
|
||||
server_port = test_port
|
||||
print(f"✓ 服务器已启动,端口: {server_port}")
|
||||
|
||||
# 创建客户端连接
|
||||
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
client_socket.settimeout(5)
|
||||
client_socket.connect(("localhost", server_port))
|
||||
print("✓ 客户端已连接到服务器")
|
||||
|
||||
# 发送游戏小提示配置请求
|
||||
request = {
|
||||
"type": "request_game_tips_config"
|
||||
}
|
||||
|
||||
request_data = json.dumps(request).encode('utf-8')
|
||||
client_socket.send(len(request_data).to_bytes(4, byteorder='big'))
|
||||
client_socket.send(request_data)
|
||||
print("✓ 已发送游戏小提示配置请求")
|
||||
|
||||
# 接收响应
|
||||
response_length_bytes = client_socket.recv(4)
|
||||
if len(response_length_bytes) != 4:
|
||||
print("❌ 接收响应长度失败")
|
||||
return False
|
||||
|
||||
response_length = int.from_bytes(response_length_bytes, byteorder='big')
|
||||
response_data = b''
|
||||
|
||||
while len(response_data) < response_length:
|
||||
chunk = client_socket.recv(response_length - len(response_data))
|
||||
if not chunk:
|
||||
break
|
||||
response_data += chunk
|
||||
|
||||
if len(response_data) != response_length:
|
||||
print("❌ 接收响应数据不完整")
|
||||
return False
|
||||
|
||||
# 解析响应
|
||||
response = json.loads(response_data.decode('utf-8'))
|
||||
print("✓ 已接收服务器响应")
|
||||
|
||||
# 验证响应
|
||||
if response.get("type") == "game_tips_config_response":
|
||||
if response.get("success"):
|
||||
config = response.get("game_tips_config", {})
|
||||
print("✓ 成功接收游戏小提示配置:")
|
||||
print(f" 切换模式: {config.get('切换模式', '未设置')}")
|
||||
print(f" 切换速度: {config.get('切换速度', '未设置')}")
|
||||
print(f" 游戏小提示数量: {len(config.get('游戏小提示', []))}")
|
||||
|
||||
tips = config.get('游戏小提示', [])
|
||||
if tips:
|
||||
print(" 前3条小提示:")
|
||||
for i, tip in enumerate(tips[:3], 1):
|
||||
print(f" {i}. {tip}")
|
||||
|
||||
return True
|
||||
else:
|
||||
message = response.get("message", "未知错误")
|
||||
print(f"❌ 服务器返回失败: {message}")
|
||||
return False
|
||||
else:
|
||||
print(f"❌ 收到意外的响应类型: {response.get('type')}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 客户端-服务端通信测试失败: {e}")
|
||||
return False
|
||||
|
||||
finally:
|
||||
# 清理资源
|
||||
if client_socket:
|
||||
try:
|
||||
client_socket.close()
|
||||
except:
|
||||
pass
|
||||
|
||||
if server and server.mongo_api:
|
||||
try:
|
||||
server.mongo_api.disconnect()
|
||||
except:
|
||||
pass
|
||||
|
||||
def main():
|
||||
"""主测试函数"""
|
||||
print("🚀 开始游戏小提示配置系统集成测试\n")
|
||||
|
||||
# 测试结果
|
||||
results = {
|
||||
"数据库配置": test_database_config(),
|
||||
"服务端配置加载": test_server_config_loading(),
|
||||
"客户端-服务端通信": test_client_server_communication()
|
||||
}
|
||||
|
||||
print("\n=== 测试结果 ===\n")
|
||||
|
||||
all_passed = True
|
||||
for test_name, result in results.items():
|
||||
status = "✓ 通过" if result else "❌ 失败"
|
||||
print(f"{test_name}测试: {status}")
|
||||
if not result:
|
||||
all_passed = False
|
||||
|
||||
if all_passed:
|
||||
print("\n🎉 所有测试通过!游戏小提示配置系统完全正常工作。")
|
||||
print("\n📋 系统功能确认:")
|
||||
print(" ✓ 数据库配置存储和读取正常")
|
||||
print(" ✓ 服务端配置加载正常")
|
||||
print(" ✓ 客户端-服务端通信正常")
|
||||
print(" ✓ 配置数据传输完整")
|
||||
print("\n🎮 客户端现在应该能够正确使用数据库中的游戏小提示配置!")
|
||||
else:
|
||||
print("\n❌ 部分测试失败,请检查相关组件。")
|
||||
|
||||
return all_passed
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user