完成部分服务器数据向MongoDB数据库迁移

This commit is contained in:
2025-07-20 21:05:31 +08:00
parent e466cde9d5
commit ec94e10fda
28 changed files with 2386 additions and 1785 deletions

View File

@@ -0,0 +1,178 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
测试MongoDB迁移功能
作者: AI Assistant
功能: 测试每日签到配置从JSON迁移到MongoDB的功能
"""
import sys
import os
import json
# 添加当前目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from SMYMongoDBAPI import SMYMongoDBAPI
def test_mongodb_migration():
"""测试MongoDB迁移功能"""
print("=== 测试MongoDB迁移功能 ===")
# 1. 测试MongoDB API连接
print("\n1. 测试MongoDB API连接:")
try:
api = SMYMongoDBAPI("test")
if api.is_connected():
print("✓ MongoDB连接成功")
else:
print("✗ MongoDB连接失败")
return False
except Exception as e:
print(f"✗ MongoDB连接异常: {e}")
return False
# 2. 测试获取每日签到配置
print("\n2. 测试获取每日签到配置:")
try:
config = api.get_daily_checkin_config()
if config:
print("✓ 成功获取每日签到配置")
print(f" 基础奖励金币范围: {config.get('基础奖励', {}).get('金币', {})}")
print(f" 种子奖励类型数量: {len(config.get('种子奖励', {}))}")
print(f" 连续签到奖励天数: {len(config.get('连续签到奖励', {}))}")
else:
print("✗ 获取每日签到配置失败")
return False
except Exception as e:
print(f"✗ 获取每日签到配置异常: {e}")
return False
# 3. 测试更新配置
print("\n3. 测试更新每日签到配置:")
try:
# 创建一个测试配置
test_config = {
"基础奖励": {
"金币": {"最小值": 300, "最大值": 600, "图标": "💰", "颜色": "#FFD700"},
"经验": {"最小值": 75, "最大值": 150, "图标": "", "颜色": "#00BFFF"}
},
"种子奖励": {
"普通": {"概率": 0.6, "数量范围": [2, 5], "种子池": ["小麦", "胡萝卜", "土豆", "稻谷"]},
"优良": {"概率": 0.25, "数量范围": [2, 4], "种子池": ["玉米", "番茄", "洋葱", "大豆", "豌豆", "黄瓜", "大白菜"]},
"稀有": {"概率": 0.12, "数量范围": [1, 3], "种子池": ["草莓", "花椰菜", "柿子", "蓝莓", "树莓"]},
"史诗": {"概率": 0.025, "数量范围": [1, 2], "种子池": ["葡萄", "南瓜", "芦笋", "茄子", "向日葵", "蕨菜"]},
"传奇": {"概率": 0.005, "数量范围": [1, 1], "种子池": ["西瓜", "甘蔗", "香草", "甜菜", "人参", "富贵竹", "芦荟", "哈密瓜"]}
},
"连续签到奖励": {
"第3天": {"额外金币": 150, "额外经验": 75, "描述": "连续签到奖励"},
"第7天": {"额外金币": 300, "额外经验": 150, "描述": "一周连击奖励"},
"第14天": {"额外金币": 600, "额外经验": 250, "描述": "半月连击奖励"},
"第21天": {"额外金币": 1000, "额外经验": 400, "描述": "三周连击奖励"},
"第30天": {"额外金币": 2000, "额外经验": 600, "描述": "满月连击奖励"}
}
}
success = api.update_daily_checkin_config(test_config)
if success:
print("✓ 成功更新测试配置到MongoDB")
else:
print("✗ 更新测试配置失败")
return False
except Exception as e:
print(f"✗ 更新测试配置异常: {e}")
return False
# 4. 验证更新后的配置
print("\n4. 验证更新后的配置:")
try:
updated_config = api.get_daily_checkin_config()
if updated_config:
print("✓ 成功获取更新后的配置")
print(f" 更新后金币范围: {updated_config.get('基础奖励', {}).get('金币', {})}")
print(f" 更新后第3天奖励: {updated_config.get('连续签到奖励', {}).get('第3天', {})}")
# 验证更新是否生效
if updated_config.get('基础奖励', {}).get('金币', {}).get('最小值') == 300:
print("✓ 配置更新验证成功")
else:
print("✗ 配置更新验证失败")
return False
else:
print("✗ 获取更新后的配置失败")
return False
except Exception as e:
print(f"✗ 验证更新后配置异常: {e}")
return False
# 5. 恢复原始配置
print("\n5. 恢复原始配置:")
try:
original_config = {
"基础奖励": {
"金币": {"最小值": 200, "最大值": 500, "图标": "💰", "颜色": "#FFD700"},
"经验": {"最小值": 50, "最大值": 120, "图标": "", "颜色": "#00BFFF"}
},
"种子奖励": {
"普通": {"概率": 0.6, "数量范围": [2, 5], "种子池": ["小麦", "胡萝卜", "土豆", "稻谷"]},
"优良": {"概率": 0.25, "数量范围": [2, 4], "种子池": ["玉米", "番茄", "洋葱", "大豆", "豌豆", "黄瓜", "大白菜"]},
"稀有": {"概率": 0.12, "数量范围": [1, 3], "种子池": ["草莓", "花椰菜", "柿子", "蓝莓", "树莓"]},
"史诗": {"概率": 0.025, "数量范围": [1, 2], "种子池": ["葡萄", "南瓜", "芦笋", "茄子", "向日葵", "蕨菜"]},
"传奇": {"概率": 0.005, "数量范围": [1, 1], "种子池": ["西瓜", "甘蔗", "香草", "甜菜", "人参", "富贵竹", "芦荟", "哈密瓜"]}
},
"连续签到奖励": {
"第3天": {"额外金币": 100, "额外经验": 50, "描述": "连续签到奖励"},
"第7天": {"额外金币": 200, "额外经验": 100, "描述": "一周连击奖励"},
"第14天": {"额外金币": 500, "额外经验": 200, "描述": "半月连击奖励"},
"第21天": {"额外金币": 800, "额外经验": 300, "描述": "三周连击奖励"},
"第30天": {"额外金币": 1500, "额外经验": 500, "描述": "满月连击奖励"}
}
}
success = api.update_daily_checkin_config(original_config)
if success:
print("✓ 成功恢复原始配置")
else:
print("✗ 恢复原始配置失败")
return False
except Exception as e:
print(f"✗ 恢复原始配置异常: {e}")
return False
# 6. 测试配置数据完整性
print("\n6. 测试配置数据完整性:")
try:
final_config = api.get_daily_checkin_config()
if final_config:
# 检查必要字段是否存在
required_fields = ["基础奖励", "种子奖励", "连续签到奖励"]
missing_fields = [field for field in required_fields if field not in final_config]
if not missing_fields:
print("✓ 配置数据完整性检查通过")
print(f" 包含字段: {', '.join(required_fields)}")
else:
print(f"✗ 配置数据缺少字段: {missing_fields}")
return False
else:
print("✗ 无法获取最终配置进行完整性检查")
return False
except Exception as e:
print(f"✗ 配置数据完整性检查异常: {e}")
return False
# 清理资源
api.disconnect()
print("\n=== 所有测试通过MongoDB迁移功能正常 ===")
return True
if __name__ == "__main__":
success = test_mongodb_migration()
if success:
print("\n🎉 MongoDB迁移测试成功完成")
sys.exit(0)
else:
print("\n❌ MongoDB迁移测试失败")
sys.exit(1)