AI重构
@@ -1,57 +1,51 @@
|
||||
# Test & Validation Tools (Unified)
|
||||
# 测试与验证工具
|
||||
|
||||
该目录包含用于测试无人机规划系统、API 接口及 LLM 服务的集成验证工具集。
|
||||
该目录用于接口回归、批量稳定性测试和结果导出。
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
使用统一入口脚本启动交互式菜单:
|
||||
## 快速开始(完整命令)
|
||||
|
||||
```bash
|
||||
python run_tests.py
|
||||
cd /home/huangfukk/DronePlanning
|
||||
source backend_service/venv/bin/activate
|
||||
python tools/test_validate/run_tests.py
|
||||
```
|
||||
|
||||
## 🛠️ 测试模式
|
||||
|
||||
### 1. 交互式单次测试 (Mode 1)
|
||||
- **场景**: 快速验证单条指令,调试 Prompt。
|
||||
- **操作**: 在终端输入自然语言指令,即时获取结果。
|
||||
- **输出**: `validation/temporary/{指令名}/`
|
||||
- `response.json`: 完整 API 响应
|
||||
- `plan.png`: 可视化任务树
|
||||
- `process.log`: 请求与响应日志
|
||||
|
||||
### 2. 批量/场景测试 (Mode 2)
|
||||
- **场景**:
|
||||
- **场景测试**: 验证一组预定义指令的正确性(默认运行 1 次)。
|
||||
- **稳定性测试**: 对同一组指令进行高频重复测试(如运行 10 次),检测成功率和延迟抖动。
|
||||
- **操作**:
|
||||
1. 选择指令文件(位于 `instructions/` 目录)。
|
||||
2. 输入每条指令的运行次数(默认 1)。
|
||||
- **输出**: `validation/{时间戳}/`
|
||||
- `test_summary.csv`: 统计摘要(成功率、平均耗时)
|
||||
- `test_details.csv`: 每次运行的详细记录
|
||||
- `instructions_backup.txt`: 本次测试使用的指令备份
|
||||
- `{指令名}/`: 包含所有运行的 `.json` 和 `.png` 产物
|
||||
|
||||
## 📂 目录结构
|
||||
## 目录说明
|
||||
|
||||
```text
|
||||
tools/test_validate/
|
||||
├── instructions/ # 指令集文件 (.txt)
|
||||
├── modules/ # 功能模块
|
||||
│ ├── api_client.py # API 客户端核心
|
||||
│ ├── interactive_test.py # 交互式测试逻辑
|
||||
│ ├── batch_runner.py # 批量测试逻辑
|
||||
│ ├── visualizer.py # 可视化工具库
|
||||
│ ├── llm_tester.py # LLM 连接测试
|
||||
│ └── drone_uploader.py # 任务上传工具
|
||||
├── validation/ # 测试产物输出
|
||||
│ ├── temporary/ # 交互式测试结果
|
||||
│ └── {时间戳}/ # 批量测试结果
|
||||
└── run_tests.py # 主程序入口
|
||||
├── instructions/ # 指令集(.txt)
|
||||
├── modules/ # API 客户端、批量执行、可视化等
|
||||
├── validation/ # 输出结果目录
|
||||
└── run_tests.py # 统一入口
|
||||
```
|
||||
|
||||
## 📄 配置文件
|
||||
## 使用方式
|
||||
|
||||
- **instructions/validate_instructions.txt**: 默认的预定义场景指令集。
|
||||
- 您可以在 `instructions/` 下添加任意 `.txt` 文件,测试时会在菜单中自动列出供选择。
|
||||
- Mode 1:交互式单条测试(快速调试)
|
||||
- Mode 2:批量测试(场景回归/稳定性)
|
||||
|
||||
输出默认在 `tools/test_validate/validation/`,包括:
|
||||
|
||||
- `test_summary.csv`
|
||||
- `test_details.csv`
|
||||
- 每条指令的 `response.json` 与 `plan.png`
|
||||
|
||||
## 典型回归流程
|
||||
|
||||
```bash
|
||||
cd /home/huangfukk/DronePlanning
|
||||
source backend_service/venv/bin/activate
|
||||
|
||||
# 先确保后端已启动
|
||||
./start_all.sh status
|
||||
|
||||
# 运行测试菜单
|
||||
python tools/test_validate/run_tests.py
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
- 后端未启动:先执行 `./start_all.sh start` 或 `./start_all_vllm.sh start`
|
||||
- API 超时:查看 `logs/fastapi.log` 与模型日志
|
||||
- 结果目录为空:确认菜单中已实际执行测试轮次
|
||||
|
||||
BIN
tools/test_validate/__pycache__/run_tests.cpython-313.pyc
Normal file
BIN
tools/test_validate/__pycache__/test_validity.cpython-313.pyc
Normal file
@@ -1,10 +1,10 @@
|
||||
无人机当前在地面,到广场查找穿黄色衣服的男子,找到后近距离拍照。
|
||||
无人机当前在空中,回到广场,对戴帽子的人进行拍照。
|
||||
无人机当前在空中,去广场西边200米,对过往的公交车拍张照,然后返航。
|
||||
无人机当前在地面,到广场查找绿色公交车,看见了拍个照片。
|
||||
无人机当前在空中,搜索小汽车,搜索到了我确认后再决定要不要拍照。
|
||||
无人机当前在空中,往广场西边飞200米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。
|
||||
无人机当前在地面,到广场边上的施工区域内,发现未戴安全帽的飞近后拍照。
|
||||
无人机当前在空中,紧急回到广场,看见了红绿灯之后直接降落。
|
||||
无人机当前在地面,快速去往东边60米,对身穿白色衣服,头戴帽子正在挟持他人的人进行拍照。
|
||||
无人机当前在空中,离黑色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。
|
||||
无人机当前在地面,到飞行场地查找穿红色衣服的男子,找到后近距离拍照。
|
||||
无人机当前在空中,回到飞行场地,对戴帽子的人进行拍照。
|
||||
无人机当前在空中,去飞行场地西边50米,对过往穿红色衣服的人拍张照,然后返航。
|
||||
无人机当前在地面,到飞行场地查找长头发的人,看见了拍个照片。
|
||||
无人机当前在空中,搜索穿红色衣服的人,搜索到了拍张照,我确认后再决定要不要返航。
|
||||
无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。
|
||||
无人机当前在地面,到飞行场地,发现未带帽子的飞近后拍照。
|
||||
无人机当前在空中,紧急回到飞行场地,看见了树之后直接降落。
|
||||
无人机当前在地面,快速去往东边30米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。
|
||||
无人机当前在空中,离白色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。
|
||||
@@ -0,0 +1,10 @@
|
||||
无人机当前在地面,到飞行场地查找穿红色衣服的男子,找到后近距离拍照。
|
||||
无人机当前在空中,回到飞行场地,对戴帽子的人进行拍照。
|
||||
无人机当前在空中,去飞行场地西边50米,对过往穿红色衣服的人拍张照,然后返航。
|
||||
无人机当前在地面,到飞行场地查找长头发的人,看见了拍个照片。
|
||||
无人机当前在空中,搜索穿红色衣服的人,搜索到了拍张照,我确认后再决定要不要返航。
|
||||
无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。
|
||||
无人机当前在地面,到飞行场地,发现未带帽子的飞近后拍照。
|
||||
无人机当前在空中,紧急回到飞行场地,看见了树之后直接降落。
|
||||
无人机当前在地面,快速去往东边30米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。
|
||||
无人机当前在空中,离白色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。
|
||||
@@ -0,0 +1,11 @@
|
||||
instruction,run_id,success,latency,error
|
||||
无人机当前在地面,到飞行场地查找穿红色衣服的男子,找到后近距离拍照。,1,True,13.293935775756836,
|
||||
无人机当前在空中,回到飞行场地,对戴帽子的人进行拍照。,1,True,10.266583442687988,
|
||||
无人机当前在空中,去飞行场地西边50米,对过往穿红色衣服的人拍张照,然后返航。,1,True,11.274949550628662,
|
||||
无人机当前在地面,到飞行场地查找长头发的人,看见了拍个照片。,1,True,1.6364917755126953,
|
||||
无人机当前在空中,搜索穿红色衣服的人,搜索到了拍张照,我确认后再决定要不要返航。,1,True,10.27147102355957,
|
||||
无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。,1,True,13.89813232421875,
|
||||
无人机当前在地面,到飞行场地,发现未带帽子的飞近后拍照。,1,True,3.24064302444458,
|
||||
无人机当前在空中,紧急回到飞行场地,看见了树之后直接降落。,1,True,19.873026847839355,
|
||||
无人机当前在地面,快速去往东边30米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。,1,True,13.099174499511719,
|
||||
无人机当前在空中,离白色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。,1,True,8.792617082595825,
|
||||
|
@@ -0,0 +1,11 @@
|
||||
Instruction,Total Runs,Success Runs,Success Rate,Avg Latency
|
||||
无人机当前在地面,到飞行场地查找穿红色衣服的男子,找到后近距离拍照。,1,1,100.0%,13.29s
|
||||
无人机当前在空中,回到飞行场地,对戴帽子的人进行拍照。,1,1,100.0%,10.27s
|
||||
无人机当前在空中,去飞行场地西边50米,对过往穿红色衣服的人拍张照,然后返航。,1,1,100.0%,11.27s
|
||||
无人机当前在地面,到飞行场地查找长头发的人,看见了拍个照片。,1,1,100.0%,1.64s
|
||||
无人机当前在空中,搜索穿红色衣服的人,搜索到了拍张照,我确认后再决定要不要返航。,1,1,100.0%,10.27s
|
||||
无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。,1,1,100.0%,13.90s
|
||||
无人机当前在地面,到飞行场地,发现未带帽子的飞近后拍照。,1,1,100.0%,3.24s
|
||||
无人机当前在空中,紧急回到飞行场地,看见了树之后直接降落。,1,1,100.0%,19.87s
|
||||
无人机当前在地面,快速去往东边30米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。,1,1,100.0%,13.10s
|
||||
无人机当前在空中,离白色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。,1,1,100.0%,8.79s
|
||||
|
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"error": "在3次尝试后,仍未能生成一个有效的Pytree。"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
无人机当前在地面,到飞行场地查找穿红色衣服的男子,找到后近距离拍照。
|
||||
无人机当前在空中,回到飞行场地,对戴帽子的人进行拍照。
|
||||
无人机当前在空中,去飞行场地西边50米,对过往穿红色衣服的人拍张照,然后返航。
|
||||
无人机当前在地面,到飞行场地查找长头发的人,看见了拍个照片。
|
||||
无人机当前在空中,搜索穿红色衣服的人,搜索到了拍张照,我确认后再决定要不要返航。
|
||||
无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。
|
||||
无人机当前在地面,到飞行场地,发现未带帽子的飞近后拍照。
|
||||
无人机当前在空中,紧急回到飞行场地,看见了树之后直接降落。
|
||||
无人机当前在地面,快速去往东边30米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。
|
||||
无人机当前在空中,离白色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。
|
||||
@@ -0,0 +1,11 @@
|
||||
instruction,run_id,success,latency,error
|
||||
无人机当前在地面,到飞行场地查找穿红色衣服的男子,找到后近距离拍照。,1,True,14.206302165985107,
|
||||
无人机当前在空中,回到飞行场地,对戴帽子的人进行拍照。,1,True,9.870139360427856,
|
||||
无人机当前在空中,去飞行场地西边50米,对过往穿红色衣服的人拍张照,然后返航。,1,True,11.775025844573975,
|
||||
无人机当前在地面,到飞行场地查找长头发的人,看见了拍个照片。,1,True,10.768753051757812,
|
||||
无人机当前在空中,搜索穿红色衣服的人,搜索到了拍张照,我确认后再决定要不要返航。,1,True,10.050657749176025,
|
||||
无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。,1,True,13.982521057128906,
|
||||
无人机当前在地面,到飞行场地,发现未带帽子的飞近后拍照。,1,True,12.104306697845459,
|
||||
无人机当前在空中,紧急回到飞行场地,看见了树之后直接降落。,1,True,21.10497808456421,
|
||||
无人机当前在地面,快速去往东边30米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。,1,True,11.49827790260315,
|
||||
无人机当前在空中,离白色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。,1,True,9.288247346878052,
|
||||
|
@@ -0,0 +1,11 @@
|
||||
Instruction,Total Runs,Success Runs,Success Rate,Avg Latency
|
||||
无人机当前在地面,到飞行场地查找穿红色衣服的男子,找到后近距离拍照。,1,1,100.0%,14.21s
|
||||
无人机当前在空中,回到飞行场地,对戴帽子的人进行拍照。,1,1,100.0%,9.87s
|
||||
无人机当前在空中,去飞行场地西边50米,对过往穿红色衣服的人拍张照,然后返航。,1,1,100.0%,11.78s
|
||||
无人机当前在地面,到飞行场地查找长头发的人,看见了拍个照片。,1,1,100.0%,10.77s
|
||||
无人机当前在空中,搜索穿红色衣服的人,搜索到了拍张照,我确认后再决定要不要返航。,1,1,100.0%,10.05s
|
||||
无人机当前在空中,往飞行场地西边飞50米,持续监控5分钟,发现人就拍照告诉我,到时间可以返航。,1,1,100.0%,13.98s
|
||||
无人机当前在地面,到飞行场地,发现未带帽子的飞近后拍照。,1,1,100.0%,12.10s
|
||||
无人机当前在空中,紧急回到飞行场地,看见了树之后直接降落。,1,1,100.0%,21.10s
|
||||
无人机当前在地面,快速去往东边30米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。,1,1,100.0%,11.50s
|
||||
无人机当前在空中,离白色衣服戴帽子的人太远了照片看不清,贴近到3米距离拍,拍完可以直接返航。,1,1,100.0%,9.29s
|
||||
|
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"error": "在3次尝试后,仍未能生成一个有效的Pytree。"
|
||||
}
|
||||
|
After Width: | Height: | Size: 62 KiB |