#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import sys import time import subprocess # Add current directory to path so modules can be imported sys.path.append(os.path.dirname(os.path.abspath(__file__))) from modules.interactive_test import run_interactive_test from modules.batch_runner import run_batch_test from modules.json_visualizer import run_json_visualization def clear_screen(): os.system('cls' if os.name == 'nt' else 'clear') def print_header(): clear_screen() print("=" * 60) print(" Drone Planning 系统测试工具箱 (Unified)") print("=" * 60) print(f"当前工作目录: {os.getcwd()}") print("-" * 60) def run_legacy_module(module_name, args=None): """运行旧的独立 Python 脚本 (用于 LLM 测试和上传工具)""" script_path = os.path.join(os.path.dirname(__file__), "modules", module_name) if not os.path.exists(script_path): print(f"❌ 错误: 找不到脚本 {script_path}") input("\n按回车键继续...") return cmd = [sys.executable, script_path] if args: cmd.extend(args) print(f"\n🚀 正在启动: {module_name} ...\n") try: # 保持当前环境变量 env = os.environ.copy() # 确保 PYTHONPATH 包含当前目录 env["PYTHONPATH"] = os.path.dirname(__file__) + os.pathsep + env.get("PYTHONPATH", "") subprocess.run(cmd, env=env, check=False) except KeyboardInterrupt: print("\n\n⚠️ 操作已取消") except Exception as e: print(f"\n❌ 运行出错: {e}") input("\n按回车键返回菜单...") def menu_drone_upload(): print("\n[3] 上传任务到无人机") print("说明: 将生成的任务文件上传到无人机 (Ground Station Client)。") ip = input("\n请输入无人机 IP 地址 (默认: 127.0.0.1): ").strip() or "127.0.0.1" file_path = input("请输入任务文件路径 (.json): ").strip() if not file_path: print("❌ 必须提供文件路径!") time.sleep(1) return if not os.path.exists(file_path): print(f"❌ 文件不存在: {file_path}") time.sleep(1) return run_legacy_module("drone_uploader.py", [ip, file_path]) def main(): # 切换到脚本所在目录 os.chdir(os.path.dirname(os.path.abspath(__file__))) while True: print_header() print("请选择测试模式:") print("1. 交互式单次测试 (Interactive Single Test)") print(" - 手动输入指令,即时查看结果和可视化") print("2. 批量/场景测试 (Batch/Scenario Test)") print(" - 读取指令文件,支持多轮压力测试,生成统计报告") print("3. 上传任务到无人机 (Drone Uploader)") print("4. LLM 服务连通性测试 (LLM Tester)") print("5. JSON 文件可视化 (Visualize JSON File)") print("0. 退出") print("-" * 60) choice = input("请输入选项 [0-5]: ").strip() if choice == '1': try: run_interactive_test() except Exception as e: print(f"❌ 运行出错: {e}") input("\n按回车键返回菜单...") elif choice == '2': try: run_batch_test() except Exception as e: print(f"❌ 运行出错: {e}") input("\n按回车键返回菜单...") elif choice == '3': menu_drone_upload() elif choice == '4': run_legacy_module("llm_tester.py") elif choice == '5': run_json_visualization() elif choice == '0': print("\n👋 再见!") break else: print("\n❌ 无效选项,请重试") time.sleep(1) if __name__ == "__main__": main()