198 lines
5.8 KiB
Python
198 lines
5.8 KiB
Python
|
#!/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())
|