fix
This commit is contained in:
224
python_core/test_functionality.py
Normal file
224
python_core/test_functionality.py
Normal file
@@ -0,0 +1,224 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user