xianyu-auto-reply/test_cache_refresh.py
2025-07-25 10:30:33 +08:00

203 lines
7.0 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
"""
测试缓存刷新功能
验证备份导入后关键字数据是否能正确刷新
"""
import json
import time
import asyncio
from db_manager import db_manager
import cookie_manager as cm
def test_cache_refresh():
"""测试缓存刷新功能"""
print("🧪 测试缓存刷新功能")
print("=" * 50)
# 1. 创建测试数据
print("\n1⃣ 创建测试数据...")
test_cookie_id = "test_cache_refresh"
test_cookie_value = "test_cookie_value_123"
test_keywords = [
("测试关键字1", "测试回复1"),
("测试关键字2", "测试回复2")
]
# 保存到数据库
db_manager.save_cookie(test_cookie_id, test_cookie_value)
db_manager.save_keywords(test_cookie_id, test_keywords)
print(f" ✅ 已保存测试账号: {test_cookie_id}")
print(f" ✅ 已保存 {len(test_keywords)} 个关键字")
# 2. 创建 CookieManager 并加载数据
print("\n2⃣ 创建 CookieManager...")
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
manager = cm.CookieManager(loop)
print(f" ✅ CookieManager 已创建")
print(f" 📊 加载的关键字: {manager.keywords.get(test_cookie_id, [])}")
# 3. 直接修改数据库(模拟备份导入)
print("\n3⃣ 模拟备份导入(直接修改数据库)...")
new_keywords = [
("新关键字1", "新回复1"),
("新关键字2", "新回复2"),
("新关键字3", "新回复3")
]
db_manager.save_keywords(test_cookie_id, new_keywords)
print(f" ✅ 数据库已更新为 {len(new_keywords)} 个新关键字")
# 4. 检查 CookieManager 缓存(应该还是旧数据)
print("\n4⃣ 检查 CookieManager 缓存...")
cached_keywords = manager.keywords.get(test_cookie_id, [])
print(f" 📊 缓存中的关键字: {cached_keywords}")
if len(cached_keywords) == len(test_keywords):
print(" ✅ 确认:缓存中仍是旧数据(符合预期)")
else:
print(" ❌ 意外:缓存已更新(不符合预期)")
# 5. 调用刷新方法
print("\n5⃣ 调用缓存刷新方法...")
success = manager.reload_from_db()
print(f" 刷新结果: {success}")
# 6. 检查刷新后的缓存
print("\n6⃣ 检查刷新后的缓存...")
refreshed_keywords = manager.keywords.get(test_cookie_id, [])
print(f" 📊 刷新后的关键字: {refreshed_keywords}")
if len(refreshed_keywords) == len(new_keywords):
print(" ✅ 成功:缓存已更新为新数据")
# 验证内容是否正确
db_keywords = db_manager.get_keywords(test_cookie_id)
if refreshed_keywords == db_keywords:
print(" ✅ 验证:缓存数据与数据库一致")
else:
print(" ❌ 错误:缓存数据与数据库不一致")
print(f" 缓存: {refreshed_keywords}")
print(f" 数据库: {db_keywords}")
else:
print(" ❌ 失败:缓存未正确更新")
# 7. 清理测试数据
print("\n7⃣ 清理测试数据...")
db_manager.delete_cookie(test_cookie_id)
print(" ✅ 测试数据已清理")
print("\n" + "=" * 50)
print("🎉 缓存刷新功能测试完成!")
def test_backup_import_scenario():
"""测试完整的备份导入场景"""
print("\n\n🔄 测试完整备份导入场景")
print("=" * 50)
# 1. 创建初始数据
print("\n1⃣ 创建初始数据...")
initial_data = {
"account1": [("hello", "你好"), ("price", "价格是100元")],
"account2": [("bye", "再见"), ("thanks", "谢谢")]
}
for cookie_id, keywords in initial_data.items():
db_manager.save_cookie(cookie_id, f"cookie_value_{cookie_id}")
db_manager.save_keywords(cookie_id, keywords)
print(f" ✅ 已创建 {len(initial_data)} 个账号的初始数据")
# 2. 导出备份
print("\n2⃣ 导出备份...")
backup_data = db_manager.export_backup()
print(f" ✅ 备份导出成功,包含 {len(backup_data['data'])} 个表")
# 3. 修改数据(模拟用户操作)
print("\n3⃣ 修改数据...")
modified_data = {
"account1": [("modified1", "修改后的回复1")],
"account3": [("new", "新账号的回复")]
}
for cookie_id, keywords in modified_data.items():
db_manager.save_cookie(cookie_id, f"cookie_value_{cookie_id}")
db_manager.save_keywords(cookie_id, keywords)
print(" ✅ 数据已修改")
# 4. 创建 CookieManager加载修改后的数据
print("\n4⃣ 创建 CookieManager...")
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
manager = cm.CookieManager(loop)
print(f" ✅ CookieManager 已创建,加载了修改后的数据")
# 5. 导入备份(恢复初始数据)
print("\n5⃣ 导入备份...")
success = db_manager.import_backup(backup_data)
print(f" 导入结果: {success}")
# 6. 检查 CookieManager 缓存(应该还是修改后的数据)
print("\n6⃣ 检查导入后的缓存...")
for cookie_id in ["account1", "account2", "account3"]:
cached = manager.keywords.get(cookie_id, [])
db_data = db_manager.get_keywords(cookie_id)
print(f" {cookie_id}:")
print(f" 缓存: {cached}")
print(f" 数据库: {db_data}")
if cached != db_data:
print(f" ❌ 不一致!需要刷新缓存")
else:
print(f" ✅ 一致")
# 7. 刷新缓存
print("\n7⃣ 刷新缓存...")
manager.reload_from_db()
# 8. 再次检查
print("\n8⃣ 检查刷新后的缓存...")
all_consistent = True
for cookie_id in ["account1", "account2"]: # account3 应该被删除了
cached = manager.keywords.get(cookie_id, [])
db_data = db_manager.get_keywords(cookie_id)
print(f" {cookie_id}:")
print(f" 缓存: {cached}")
print(f" 数据库: {db_data}")
if cached != db_data:
print(f" ❌ 仍然不一致!")
all_consistent = False
else:
print(f" ✅ 一致")
# 检查 account3 是否被正确删除
if "account3" not in manager.keywords:
print(" ✅ account3 已从缓存中删除")
else:
print(" ❌ account3 仍在缓存中")
all_consistent = False
# 9. 清理
print("\n9⃣ 清理测试数据...")
for cookie_id in ["account1", "account2", "account3"]:
db_manager.delete_cookie(cookie_id)
print("\n" + "=" * 50)
if all_consistent:
print("🎉 备份导入场景测试成功!")
else:
print("❌ 备份导入场景测试失败!")
if __name__ == "__main__":
try:
test_cache_refresh()
test_backup_import_scenario()
except Exception as e:
print(f"❌ 测试过程中发生错误: {e}")
import traceback
traceback.print_exc()