添加脚本稳定性验证工具

- 检查依赖库和Python版本
- 验证文件结构和语法
- 模拟测试核心功能
- 命令行接口测试
- 日志配置检查
This commit is contained in:
Ke
2026-04-02 14:57:06 +08:00
parent 8960436379
commit 88277ccf4e

261
validate.py Normal file
View File

@@ -0,0 +1,261 @@
#!/usr/bin/env python3
"""
脚本稳定性验证工具
检查脚本的各项功能是否正常
"""
import sys
import os
import importlib
import subprocess
import time
def check_dependencies():
"""检查依赖库是否安装"""
print("=== 检查依赖库 ===")
dependencies = ['pyautogui', 'pygetwindow']
missing = []
for dep in dependencies:
try:
importlib.import_module(dep)
print(f"{dep}")
except ImportError:
print(f"{dep} 未安装")
missing.append(dep)
if missing:
print(f"\n缺少依赖库,请运行: pip install {' '.join(missing)}")
return False
return True
def check_python_version():
"""检查Python版本"""
print("\n=== 检查Python版本 ===")
version = sys.version_info
print(f"Python版本: {sys.version.split()[0]}")
if version.major == 3 and version.minor >= 6:
print("✓ Python版本符合要求 (3.6+)")
return True
else:
print("✗ 需要Python 3.6或更高版本")
return False
def check_file_structure():
"""检查文件结构"""
print("\n=== 检查文件结构 ===")
required_files = ['main.py', 'requirements.txt', 'README.md']
missing = []
for file in required_files:
if os.path.exists(file):
print(f"{file}")
else:
print(f"{file} 不存在")
missing.append(file)
if missing:
print(f"\n缺少文件: {', '.join(missing)}")
return False
return True
def check_syntax():
"""检查语法错误"""
print("\n=== 检查语法 ===")
try:
with open('main.py', 'r', encoding='utf-8') as f:
source = f.read()
compile(source, 'main.py', 'exec')
print("✓ main.py 语法正确")
return True
except SyntaxError as e:
print(f"✗ 语法错误: {e}")
return False
def check_imports():
"""检查导入"""
print("\n=== 检查导入 ===")
try:
# 尝试导入主模块
import main
print("✓ 可以导入main模块")
# 检查类是否存在
from main import FishingBot
print("✓ FishingBot类存在")
# 清理
del main
return True
except Exception as e:
print(f"✗ 导入错误: {e}")
return False
def run_simulation():
"""运行模拟测试(不实际操作窗口)"""
print("\n=== 运行模拟测试 ===")
try:
# 创建模拟的FishingBot但替换实际操作方法
from main import FishingBot
class MockFishingBot(FishingBot):
def __init__(self, window_title="测试窗口", interval=1.0):
super().__init__(window_title, interval)
self.actions = []
def find_window(self):
self.actions.append("find_window")
print(" 模拟: 查找窗口")
return type('MockWindow', (), {'title': '测试窗口', 'activate': lambda: None})()
def activate_window(self, window):
self.actions.append("activate_window")
print(" 模拟: 激活窗口")
return True
def send_fishing_message(self):
self.actions.append("send_fishing_message")
print(" 模拟: 发送钓鱼消息")
return True
def send_reel_message(self):
self.actions.append("send_reel_message")
print(" 模拟: 发送收杆消息")
return True
bot = MockFishingBot("测试窗口", 0.1)
# 运行一个周期
print(" 运行一个周期...")
success = bot.run_cycle()
if success:
print("✓ 模拟周期成功完成")
print(f" 执行的操作: {', '.join(bot.actions)}")
return True
else:
print("✗ 模拟周期失败")
return False
except Exception as e:
print(f"✗ 模拟测试错误: {e}")
import traceback
traceback.print_exc()
return False
def check_logging():
"""检查日志配置"""
print("\n=== 检查日志配置 ===")
try:
import logging
from main import logger
# 检查logger是否配置
if logger.handlers:
print("✓ 日志处理器已配置")
# 检查是否可以记录日志
logger.info("测试日志消息")
print("✓ 可以记录日志")
# 检查日志文件
if os.path.exists('fishing_bot.log'):
print("✓ 日志文件存在")
else:
print("⚠ 日志文件不存在(首次运行后会创建)")
return True
else:
print("✗ 日志处理器未配置")
return False
except Exception as e:
print(f"✗ 日志检查错误: {e}")
return False
def run_command_test():
"""运行命令行测试"""
print("\n=== 运行命令行测试 ===")
tests = [
("python main.py --help", "显示帮助信息"),
("python main.py --test", "测试模式"),
]
all_passed = True
for cmd, description in tests:
print(f" 测试: {description}")
try:
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10)
if result.returncode == 0:
print(f" ✓ 命令执行成功: {cmd}")
else:
print(f" ✗ 命令执行失败: {cmd}")
print(f" 错误: {result.stderr[:200]}")
all_passed = False
except subprocess.TimeoutExpired:
print(f" ✗ 命令超时: {cmd}")
all_passed = False
except Exception as e:
print(f" ✗ 命令异常: {e}")
all_passed = False
return all_passed
def main():
"""主验证函数"""
print("开始验证脚本稳定性...\n")
checks = [
("Python版本", check_python_version),
("文件结构", check_file_structure),
("依赖库", check_dependencies),
("语法", check_syntax),
("导入", check_imports),
("日志配置", check_logging),
("模拟测试", run_simulation),
("命令行测试", run_command_test),
]
results = []
for name, check_func in checks:
try:
success = check_func()
results.append((name, success))
except Exception as e:
print(f"检查 '{name}' 时出错: {e}")
results.append((name, False))
# 汇总结果
print("\n" + "="*50)
print("验证结果汇总:")
print("="*50)
passed = 0
total = len(results)
for name, success in results:
status = "✓ 通过" if success else "✗ 失败"
print(f"{name:20} {status}")
if success:
passed += 1
print("="*50)
print(f"总计: {passed}/{total} 项检查通过")
if passed == total:
print("\n✅ 所有检查通过!脚本稳定性良好。")
print("建议进一步测试:")
print("1. 在实际窗口中运行测试模式: python main.py --test")
print("2. 运行短期循环: python main.py --cycles 5 --interval 2")
print("3. 检查日志文件: fishing_bot.log")
return 0
else:
print(f"\n{total - passed} 项检查未通过,请根据上述输出修复问题。")
return 1
if __name__ == "__main__":
sys.exit(main())