227 lines
7.7 KiB
Python
227 lines
7.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
配置API测试脚本
|
|
用于测试设备配置HTTP API的功能
|
|
"""
|
|
|
|
import requests
|
|
import json
|
|
import time
|
|
|
|
|
|
class ConfigAPITester:
|
|
"""配置API测试器"""
|
|
|
|
def __init__(self, base_url="http://localhost:5002"):
|
|
"""
|
|
初始化测试器
|
|
|
|
Args:
|
|
base_url: API基础URL
|
|
"""
|
|
self.base_url = base_url
|
|
self.api_url = f"{base_url}/api/config"
|
|
|
|
def test_get_all_configs(self):
|
|
"""测试获取所有设备配置"""
|
|
print("\n=== 测试获取所有设备配置 ===")
|
|
try:
|
|
response = requests.get(f"{self.api_url}/devices")
|
|
result = response.json()
|
|
|
|
if result['success']:
|
|
print("✓ 获取所有设备配置成功")
|
|
print(json.dumps(result['data'], indent=2, ensure_ascii=False))
|
|
else:
|
|
print(f"✗ 获取失败: {result['message']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 请求异常: {e}")
|
|
|
|
def test_get_single_config(self, device_name):
|
|
"""测试获取单个设备配置"""
|
|
print(f"\n=== 测试获取{device_name}设备配置 ===")
|
|
try:
|
|
response = requests.get(f"{self.api_url}/devices/{device_name}")
|
|
result = response.json()
|
|
|
|
if result['success']:
|
|
print(f"✓ 获取{device_name}配置成功")
|
|
print(json.dumps(result['data'], indent=2, ensure_ascii=False))
|
|
else:
|
|
print(f"✗ 获取失败: {result['message']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 请求异常: {e}")
|
|
|
|
def test_set_imu_config(self):
|
|
"""测试设置IMU配置"""
|
|
print("\n=== 测试设置IMU配置 ===")
|
|
try:
|
|
data = {
|
|
"device_type": "real",
|
|
"port": "COM6",
|
|
"baudrate": 9600
|
|
}
|
|
|
|
response = requests.post(f"{self.api_url}/devices/imu", json=data)
|
|
result = response.json()
|
|
|
|
if result['success']:
|
|
print("✓ 设置IMU配置成功")
|
|
print(f"消息: {result['message']}")
|
|
print("更新后的配置:")
|
|
print(json.dumps(result['config'], indent=2, ensure_ascii=False))
|
|
else:
|
|
print(f"✗ 设置失败: {result['message']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 请求异常: {e}")
|
|
|
|
def test_set_pressure_config(self):
|
|
"""测试设置压力板配置"""
|
|
print("\n=== 测试设置压力板配置 ===")
|
|
try:
|
|
data = {
|
|
"device_type": "real",
|
|
"use_mock": False,
|
|
"port": "COM5",
|
|
"baudrate": 115200
|
|
}
|
|
|
|
response = requests.post(f"{self.api_url}/devices/pressure", json=data)
|
|
result = response.json()
|
|
|
|
if result['success']:
|
|
print("✓ 设置压力板配置成功")
|
|
print(f"消息: {result['message']}")
|
|
print("更新后的配置:")
|
|
print(json.dumps(result['config'], indent=2, ensure_ascii=False))
|
|
else:
|
|
print(f"✗ 设置失败: {result['message']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 请求异常: {e}")
|
|
|
|
def test_set_camera_config(self):
|
|
"""测试设置相机配置"""
|
|
print("\n=== 测试设置相机配置 ===")
|
|
try:
|
|
data = {
|
|
"device_index": 0,
|
|
"width": 1280,
|
|
"height": 720,
|
|
"fps": 30
|
|
}
|
|
|
|
response = requests.post(f"{self.api_url}/devices/camera", json=data)
|
|
result = response.json()
|
|
|
|
if result['success']:
|
|
print("✓ 设置相机配置成功")
|
|
print(f"消息: {result['message']}")
|
|
print("更新后的配置:")
|
|
print(json.dumps(result['config'], indent=2, ensure_ascii=False))
|
|
else:
|
|
print(f"✗ 设置失败: {result['message']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 请求异常: {e}")
|
|
|
|
def test_set_femtobolt_config(self):
|
|
"""测试设置FemtoBolt配置"""
|
|
print("\n=== 测试设置FemtoBolt配置 ===")
|
|
try:
|
|
data = {
|
|
"color_resolution": "1080P",
|
|
"depth_mode": "NFOV_UNBINNED",
|
|
"fps": 30,
|
|
"depth_range_min": 1200,
|
|
"depth_range_max": 1500
|
|
}
|
|
|
|
response = requests.post(f"{self.api_url}/devices/femtobolt", json=data)
|
|
result = response.json()
|
|
|
|
if result['success']:
|
|
print("✓ 设置FemtoBolt配置成功")
|
|
print(f"消息: {result['message']}")
|
|
print("更新后的配置:")
|
|
print(json.dumps(result['config'], indent=2, ensure_ascii=False))
|
|
else:
|
|
print(f"✗ 设置失败: {result['message']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 请求异常: {e}")
|
|
|
|
def test_validate_config(self):
|
|
"""测试验证配置"""
|
|
print("\n=== 测试验证配置 ===")
|
|
try:
|
|
response = requests.get(f"{self.api_url}/validate")
|
|
result = response.json()
|
|
|
|
if result['success']:
|
|
print("✓ 配置验证成功")
|
|
validation_result = result['data']
|
|
print(f"配置有效性: {validation_result['valid']}")
|
|
if validation_result['errors']:
|
|
print(f"错误: {validation_result['errors']}")
|
|
if validation_result['warnings']:
|
|
print(f"警告: {validation_result['warnings']}")
|
|
else:
|
|
print(f"✗ 验证失败: {result['message']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 请求异常: {e}")
|
|
|
|
def test_reload_config(self):
|
|
"""测试重新加载配置"""
|
|
print("\n=== 测试重新加载配置 ===")
|
|
try:
|
|
response = requests.post(f"{self.api_url}/reload")
|
|
result = response.json()
|
|
|
|
if result['success']:
|
|
print("✓ 重新加载配置成功")
|
|
print(f"消息: {result['message']}")
|
|
else:
|
|
print(f"✗ 重新加载失败: {result['message']}")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 请求异常: {e}")
|
|
|
|
def run_all_tests(self):
|
|
"""运行所有测试"""
|
|
print("开始配置API功能测试...")
|
|
print(f"API地址: {self.api_url}")
|
|
|
|
# 等待服务启动
|
|
print("\n等待API服务启动...")
|
|
time.sleep(2)
|
|
|
|
# 运行测试
|
|
self.test_get_all_configs()
|
|
|
|
# 测试获取单个设备配置
|
|
for device in ['imu', 'pressure', 'camera', 'femtobolt']:
|
|
self.test_get_single_config(device)
|
|
|
|
# 测试设置配置
|
|
self.test_set_imu_config()
|
|
self.test_set_pressure_config()
|
|
self.test_set_camera_config()
|
|
self.test_set_femtobolt_config()
|
|
|
|
# 测试其他功能
|
|
self.test_validate_config()
|
|
self.test_reload_config()
|
|
|
|
print("\n=== 测试完成 ===")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# 创建测试器并运行测试
|
|
tester = ConfigAPITester()
|
|
tester.run_all_tests() |