Yolov/test.py

172 lines
6.0 KiB
Python
Raw Normal View History

2025-12-11 13:41:07 +08:00
import requests
import json
import time
def test_create_multi_model_task():
"""测试创建多模型任务"""
url = "http://localhost:9309/api/tasks/create"
task_data = {
"rtmp_url": "rtmp://175.27.168.120:6019/live/8UUXN5400A079H",
"push_url": "rtmp://localhost:1935/live/15",
"taskname": "多模型道路监控",
"models": [
{
"path": "yolov8n_encrypted.pt",
"encryption_key":"123456",
"tags": {
"0": {"name": "汽车", "reliability": 0.4},
"1": {"name": "行人", "reliability": 0.3},
"2": {"name": "自行车", "reliability": 0.35}
},
"conf_thres": 0.3,
"imgsz": 640,
"color": [0, 255, 0], # 绿色
"device": "cuda:0",
"line_width": 2,
"enabled": True
},
{
"path": "yolov8n_encrypted.pt",
"encryption_key": "123456",
"tags": {
"0": {"name": "轿车", "reliability": 0.5},
"1": {"name": "卡车", "reliability": 0.6},
"2": {"name": "公交车", "reliability": 0.55}
},
"conf_thres": 0.35,
"imgsz": 1280,
"color": [255, 0, 0], # 红色
"device": "cuda:0",
"line_width": 2,
"enabled": True
}
]
}
try:
print("发送多模型任务创建请求...")
response = requests.post(url, json=task_data, timeout=30)
print(f"响应状态码: {response.status_code}")
if response.status_code == 200:
result = response.json()
print(f"响应内容: {json.dumps(result, indent=2, ensure_ascii=False)}")
if result.get('status') == 'success':
task_id = result.get('task_id')
print(f"\n✅ 多模型任务创建成功!")
print(f"任务ID: {task_id}")
print(f"任务名称: {task_data['taskname']}")
print(f"加载模型数: {len(task_data['models'])}")
# 等待任务启动
time.sleep(2)
# 测试获取任务详情
status_url = f"http://localhost:9309/api/tasks/{task_id}/status"
status_response = requests.get(status_url)
if status_response.status_code == 200:
status_data = status_response.json()
print(f"\n任务状态: {status_data.get('data', {}).get('status')}")
print(
f"模型信息: {json.dumps(status_data.get('data', {}).get('models'), indent=2, ensure_ascii=False)}")
# 验证模型数量
models = status_data.get('data', {}).get('models', [])
if len(models) == 2:
print("✅ 模型数量正确")
else:
print(f"❌ 模型数量错误: 期望2实际{len(models)}")
else:
print(f"❌ 获取任务状态失败: {status_response.text}")
else:
print(f"❌ 请求失败: {response.text}")
except Exception as e:
print(f"❌ 测试失败: {e}")
def test_get_all_tasks():
"""测试获取所有任务"""
url = "http://localhost:9309/api/tasks"
try:
response = requests.get(url)
if response.status_code == 200:
result = response.json()
print(f"\n获取所有任务成功:")
print(f"总任务数: {result.get('data', {}).get('total', 0)}")
print(f"活动任务数: {result.get('data', {}).get('active', 0)}")
print(f"总模型数: {result.get('data', {}).get('models_count', 0)}")
tasks = result.get('data', {}).get('tasks', [])
for i, task in enumerate(tasks):
print(f"\n任务 {i + 1}:")
print(f" ID: {task.get('task_id')}")
print(f" 名称: {task.get('config', {}).get('taskname')}")
print(f" 状态: {task.get('status')}")
print(f" 模型数: {len(task.get('models', []))}")
# 显示每个模型的详细信息
for model in task.get('models', []):
print(f" - {model.get('name')}: 阈值={model.get('conf_thres')}, 颜色={model.get('color')}")
else:
print(f"❌ 获取任务列表失败: {response.text}")
except Exception as e:
print(f"❌ 测试失败: {e}")
def test_error_cases():
"""测试错误情况"""
url = "http://localhost:9309/api/tasks/create"
# 测试1: 缺少rtmp_url
print("\n测试1: 缺少rtmp_url")
task_data = {
"taskname": "错误测试",
"models": [{"path": "yolov8n.pt"}]
}
response = requests.post(url, json=task_data)
print(f"响应: {response.status_code} - {response.text}")
# 测试2: 缺少models
print("\n测试2: 缺少models")
task_data = {
"rtmp_url": "rtmp://localhost:1935/live/14",
"taskname": "错误测试"
}
response = requests.post(url, json=task_data)
print(f"响应: {response.status_code} - {response.text}")
# 测试3: models不是列表
print("\n测试3: models不是列表")
task_data = {
"rtmp_url": "rtmp://localhost:1935/live/14",
"taskname": "错误测试",
"models": {"path": "yolov8n.pt"} # 应该是列表
}
response = requests.post(url, json=task_data)
print(f"响应: {response.status_code} - {response.text}")
if __name__ == "__main__":
print("=" * 50)
print("多模型专用测试脚本")
print("=" * 50)
# 测试正常情况
test_create_multi_model_task()
# 测试获取所有任务
test_get_all_tasks()
# 测试错误情况
test_error_cases()
print("\n" + "=" * 50)
print("测试完成!")
print("=" * 50)