#!/usr/bin/env python3 """ 测试Python包装器功能 """ import os import sys import subprocess import tempfile import shutil def test_help(): """测试帮助信息""" print("测试 --help 参数...") result = subprocess.run([sys.executable, 'main.py', '--help'], capture_output=True, text=True) if result.returncode == 0: print("✓ 帮助信息显示正常") return True else: print("✗ 帮助信息显示失败") print(result.stderr) return False def test_missing_args(): """测试缺少参数的情况""" print("测试缺少参数...") result = subprocess.run([sys.executable, 'main.py'], capture_output=True, text=True) if result.returncode != 0: print("✓ 正确处理缺少参数的情况") return True else: print("✗ 未能正确处理缺少参数") return False def test_invalid_input(): """测试无效输入文件""" print("测试无效输入文件...") result = subprocess.run([sys.executable, 'main.py', 'nonexistent.stp', 'output.glb'], capture_output=True, text=True) if result.returncode != 0 and "输入文件不存在" in result.stdout: print("✓ 正确处理无效输入文件") return True else: print("✗ 未能正确处理无效输入文件") print(result.stdout) return False def test_invalid_output(): """测试无效输出文件扩展名""" print("测试无效输出文件扩展名...") # 创建临时输入文件 with tempfile.NamedTemporaryFile(suffix='.stp', delete=False) as tmp_input: tmp_input.write(b"dummy content") tmp_input_path = tmp_input.name try: result = subprocess.run([sys.executable, 'main.py', tmp_input_path, 'output.txt'], capture_output=True, text=True) if result.returncode != 0 and "输出文件必须是.glb格式" in result.stdout: print("✓ 正确处理无效输出文件扩展名") return True else: print("✗ 未能正确处理无效输出文件扩展名") print(result.stdout) return False finally: os.unlink(tmp_input_path) def test_quality_presets(): """测试质量预设""" print("测试质量预设...") # 创建临时输入文件 with tempfile.NamedTemporaryFile(suffix='.stp', delete=False) as tmp_input: tmp_input.write(b"dummy content") tmp_input_path = tmp_input.name # 创建临时输出目录 with tempfile.TemporaryDirectory() as tmp_dir: tmp_output_path = os.path.join(tmp_dir, 'output.glb') try: # 测试不同质量等级 for quality in ['low', 'medium', 'high', 'ultra']: print(f" 测试质量等级: {quality}") result = subprocess.run([ sys.executable, 'main.py', tmp_input_path, tmp_output_path, '--quality', quality ], capture_output=True, text=True) # 应该失败(因为没有找到可执行文件),但参数解析应该成功 if "未找到STP2GLB.exe可执行文件" in result.stdout: print(f" ✓ {quality} 质量等级参数解析正常") else: print(f" ✗ {quality} 质量等级参数解析异常") print(result.stdout) return False return True finally: os.unlink(tmp_input_path) def test_custom_quality(): """测试自定义质量参数""" print("测试自定义质量参数...") # 创建临时输入文件 with tempfile.NamedTemporaryFile(suffix='.stp', delete=False) as tmp_input: tmp_input.write(b"dummy content") tmp_input_path = tmp_input.name # 创建临时输出目录 with tempfile.TemporaryDirectory() as tmp_dir: tmp_output_path = os.path.join(tmp_dir, 'output.glb') try: # 测试custom质量但没有指定参数 result = subprocess.run([ sys.executable, 'main.py', tmp_input_path, tmp_output_path, '--quality', 'custom' ], capture_output=True, text=True) if result.returncode != 0 and "必须指定--linear-deflection或--angular-deflection" in result.stdout: print(" ✓ 正确处理custom质量缺少参数") else: print(" ✗ 未能正确处理custom质量缺少参数") print(result.stdout) return False # 测试custom质量并指定参数 result = subprocess.run([ sys.executable, 'main.py', tmp_input_path, tmp_output_path, '--quality', 'custom', '--linear-deflection', '0.05', '--angular-deflection', '0.2' ], capture_output=True, text=True) # 应该失败(因为没有找到可执行文件),但参数解析应该成功 if "未找到STP2GLB.exe可执行文件" in result.stdout: print(" ✓ custom质量参数解析正常") return True else: print(" ✗ custom质量参数解析异常") print(result.stdout) return False finally: os.unlink(tmp_input_path) def main(): """主测试函数""" print("Python包装器功能测试") print("=" * 40) # 检查main.py是否存在 if not os.path.exists('main.py'): print("错误: main.py 文件不存在") return 1 tests = [ test_help, test_missing_args, test_invalid_input, test_invalid_output, test_quality_presets, test_custom_quality, ] passed = 0 total = len(tests) for test_func in tests: try: if test_func(): passed += 1 print() except Exception as e: print(f"✗ 测试异常: {e}") print() print("=" * 40) print(f"测试结果: {passed}/{total} 通过") if passed == total: print("✓ 所有测试通过!") return 0 else: print("✗ 部分测试失败") return 1 if __name__ == '__main__': sys.exit(main())