VWED_server/packaging/scripts/test_build.py
2025-09-09 10:41:27 +08:00

198 lines
5.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

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 python
# -*- coding: utf-8 -*-
"""
测试构建脚本
用于验证打包环境和基本功能
"""
import os
import sys
import subprocess
from pathlib import Path
def test_python_environment():
"""测试Python环境"""
print("=== 测试Python环境 ===")
print(f"Python版本: {sys.version}")
print(f"Python路径: {sys.executable}")
# 测试关键模块
modules = ['tkinter', 'subprocess', 'pathlib', 'configparser']
for module in modules:
try:
__import__(module)
print(f"{module} 可用")
except ImportError:
print(f"{module} 不可用")
return True
def test_project_structure():
"""测试项目结构"""
print("\n=== 测试项目结构 ===")
project_root = Path(__file__).parent.parent.parent
required_files = [
'app.py',
'requirements.txt',
'config/settings.py',
'config/tf_api_config.py',
'packaging/main_with_config.py',
'packaging/config_tool/config_manager.py'
]
all_found = True
for file_path in required_files:
full_path = project_root / file_path
if full_path.exists():
print(f"{file_path}")
else:
print(f"{file_path} 未找到")
all_found = False
return all_found
def test_config_tool():
"""测试配置工具不启动GUI"""
print("\n=== 测试配置工具 ===")
try:
project_root = Path(__file__).parent.parent.parent
config_tool_path = project_root / "packaging" / "config_tool" / "startup_loader.py"
# 测试配置加载器
result = subprocess.run([
sys.executable, str(config_tool_path)
], capture_output=True, text=True, cwd=str(project_root))
if result.returncode == 0:
print("✓ 配置加载器测试通过")
print(f"输出: {result.stdout.strip()}")
return True
else:
print("✗ 配置加载器测试失败")
print(f"错误: {result.stderr}")
return False
except Exception as e:
print(f"✗ 配置工具测试异常: {e}")
return False
def test_pyinstaller():
"""测试PyInstaller是否可用"""
print("\n=== 测试PyInstaller ===")
try:
result = subprocess.run([
sys.executable, "-m", "pip", "show", "pyinstaller"
], capture_output=True, text=True)
if result.returncode == 0:
print("✓ PyInstaller 已安装")
# 尝试运行 pyinstaller --version
version_result = subprocess.run([
"pyinstaller", "--version"
], capture_output=True, text=True)
if version_result.returncode == 0:
print(f"✓ PyInstaller版本: {version_result.stdout.strip()}")
return True
else:
print("✗ PyInstaller 无法运行")
return False
else:
print("✗ PyInstaller 未安装")
print("尝试安装...")
install_result = subprocess.run([
sys.executable, "-m", "pip", "install", "pyinstaller"
], capture_output=True, text=True)
if install_result.returncode == 0:
print("✓ PyInstaller 安装成功")
return True
else:
print("✗ PyInstaller 安装失败")
print(f"错误: {install_result.stderr}")
return False
except Exception as e:
print(f"✗ PyInstaller测试异常: {e}")
return False
def test_main_imports():
"""测试主程序导入"""
print("\n=== 测试主程序导入 ===")
try:
project_root = Path(__file__).parent.parent.parent
# 临时添加项目路径
sys.path.insert(0, str(project_root))
# 测试主要模块导入
test_modules = [
'config.settings',
'config.tf_api_config',
'utils.logger'
]
for module in test_modules:
try:
__import__(module)
print(f"{module}")
except ImportError as e:
print(f"{module}: {e}")
return False
print("✓ 主程序模块导入测试通过")
return True
except Exception as e:
print(f"✗ 主程序导入测试异常: {e}")
return False
finally:
# 清理路径
if str(project_root) in sys.path:
sys.path.remove(str(project_root))
def main():
"""主函数"""
print("VWED任务系统打包环境测试")
print("=" * 50)
tests = [
("Python环境", test_python_environment),
("项目结构", test_project_structure),
("配置工具", test_config_tool),
("PyInstaller", test_pyinstaller),
("主程序导入", test_main_imports)
]
results = []
for test_name, test_func in tests:
try:
result = test_func()
results.append((test_name, result))
except Exception as e:
print(f"测试 {test_name} 发生异常: {e}")
results.append((test_name, False))
# 总结
print("\n" + "=" * 50)
print("测试结果总结:")
all_passed = True
for test_name, result in results:
status = "✓ 通过" if result else "✗ 失败"
print(f"{test_name}: {status}")
if not result:
all_passed = False
if all_passed:
print("\n 所有测试通过!可以进行打包。")
return 0
else:
print("\n 部分测试失败,请检查并解决问题后重试。")
return 1
if __name__ == "__main__":
exit(main())