mxivideo/python_core/test_functionality.py

225 lines
6.3 KiB
Python

#!/usr/bin/env python3
"""
功能测试脚本 - 验证各个模块是否正常工作
"""
import subprocess
import json
import sys
from pathlib import Path
def run_command(exe_path, module, action, params=None):
"""运行命令并返回结果"""
cmd = [str(exe_path), '--module', module, '--action', action]
if params:
cmd.extend(['--params', json.dumps(params)])
try:
result = subprocess.run(
cmd,
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
try:
return True, json.loads(result.stdout)
except json.JSONDecodeError:
return True, {"raw_output": result.stdout}
else:
return False, {
"error": result.stderr,
"stdout": result.stdout,
"returncode": result.returncode
}
except subprocess.TimeoutExpired:
return False, {"error": "Command timed out"}
except Exception as e:
return False, {"error": str(e)}
def test_basic_functionality(exe_path):
"""测试基础功能"""
print("🧪 Testing basic functionality...")
tests = [
# 基础测试
("test", "hello", None),
("test", "echo", {"message": "Hello World"}),
# 版本测试
("test", "version", None),
]
results = []
for module, action, params in tests:
print(f" Testing {module}.{action}...")
success, result = run_command(exe_path, module, action, params)
results.append({
"test": f"{module}.{action}",
"success": success,
"result": result
})
if success:
print(f" ✅ Success")
else:
print(f" ❌ Failed: {result.get('error', 'Unknown error')}")
return results
def test_service_modules(exe_path):
"""测试服务模块"""
print("🔧 Testing service modules...")
tests = [
# 模板管理测试
("template_manager", "get_templates", None),
# 项目管理测试
("project_manager", "get_projects", None),
# 媒体管理测试
("media_manager", "get_media_list", None),
# 音频管理测试
("audio_manager", "get_audio_list", None),
# 模特管理测试
("model_manager", "get_models", None),
# 资源分类测试
("resource_category_manager", "get_all_categories", None),
# 文件管理测试
("file_manager", "list_files", {"path": "."}),
]
results = []
for module, action, params in tests:
print(f" Testing {module}.{action}...")
success, result = run_command(exe_path, module, action, params)
results.append({
"test": f"{module}.{action}",
"success": success,
"result": result
})
if success:
print(f" ✅ Success")
else:
print(f" ❌ Failed: {result.get('error', 'Unknown error')}")
return results
def test_ai_modules(exe_path):
"""测试AI模块"""
print("🤖 Testing AI modules...")
tests = [
# AI视频生成测试
("ai_video", "test_environment", None),
("video_generator", "get_status", None),
]
results = []
for module, action, params in tests:
print(f" Testing {module}.{action}...")
success, result = run_command(exe_path, module, action, params)
results.append({
"test": f"{module}.{action}",
"success": success,
"result": result
})
if success:
print(f" ✅ Success")
else:
print(f" ❌ Failed: {result.get('error', 'Unknown error')}")
return results
def generate_report(all_results):
"""生成测试报告"""
print("\n📊 Test Report")
print("=" * 50)
total_tests = 0
passed_tests = 0
for category, results in all_results.items():
print(f"\n{category}:")
for result in results:
total_tests += 1
if result['success']:
passed_tests += 1
status = "✅ PASS"
else:
status = "❌ FAIL"
print(f" {result['test']}: {status}")
if not result['success']:
error = result['result'].get('error', 'Unknown error')
print(f" Error: {error}")
print(f"\nSummary: {passed_tests}/{total_tests} tests passed")
if passed_tests == total_tests:
print("🎉 All tests passed!")
return True
else:
print(f"⚠️ {total_tests - passed_tests} tests failed")
return False
def main():
"""主函数"""
print("🚀 MixVideo V2 Python Core - Functionality Test")
print("=" * 50)
# 查找可执行文件
exe_path = Path("dist/mixvideo-python-core.exe")
if not exe_path.exists():
print(f"❌ Executable not found: {exe_path}")
print("Please build the executable first using:")
print(" python -m PyInstaller build_enhanced.spec")
return 1
print(f"📁 Testing executable: {exe_path}")
# 运行测试
all_results = {}
try:
# 基础功能测试
all_results["Basic Functionality"] = test_basic_functionality(exe_path)
# 服务模块测试
all_results["Service Modules"] = test_service_modules(exe_path)
# AI模块测试
all_results["AI Modules"] = test_ai_modules(exe_path)
# 生成报告
success = generate_report(all_results)
# 保存详细结果
report_file = Path("test_results.json")
with open(report_file, 'w', encoding='utf-8') as f:
json.dump(all_results, f, indent=2, ensure_ascii=False)
print(f"\n📄 Detailed results saved to: {report_file}")
return 0 if success else 1
except KeyboardInterrupt:
print("\n⚠️ Testing interrupted by user")
return 130
except Exception as e:
print(f"\n❌ Testing failed with error: {e}")
return 1
if __name__ == "__main__":
sys.exit(main())