114 lines
3.1 KiB
Python
Raw Permalink Normal View History

2026-01-13 11:27:21 +08:00
"""异常场景测试脚本"""
import requests
import json
import time
CLOUD_URL = "http://127.0.0.1:5000/api/upload"
def test_scenario(name, url, data, headers, expected_status):
"""测试单个异常场景"""
print(f"\n{'='*60}")
print(f"测试场景: {name}")
print('='*60)
try:
response = requests.post(url, json=data, headers=headers, timeout=5)
print(f"状态码: {response.status_code}")
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
if response.status_code == expected_status:
print(f"✅ 通过(符合预期 {expected_status}")
return True
else:
print(f"❌ 失败(预期 {expected_status},实际 {response.status_code}")
return False
except Exception as e:
print(f"❌ 异常: {e}")
return False
def main():
"""运行所有异常场景测试"""
print("="*60)
print("🧪 云端异常场景测试")
print("="*60)
results = []
current_time = time.time()
# 场景1: 错误的API Key (401)
results.append(test_scenario(
"错误的API Key",
CLOUD_URL,
{
"device_id": "test_device",
"upload_time": "2026-01-12T10:00:00",
"events": [{"timestamp": current_time, "heart_rate": 72}],
"summary": {}
},
{
"Authorization": "Bearer wrong_api_key_123456",
"Content-Type": "application/json"
},
401
))
# 场景2: 缺少必填字段 (400)
results.append(test_scenario(
"缺少必填字段 (events)",
CLOUD_URL,
{
"device_id": "test_device",
"upload_time": "2026-01-12T10:00:00",
# 故意缺少 events
"summary": {}
},
{
"Authorization": "Bearer edge_device_key_001",
"Content-Type": "application/json"
},
400
))
# 场景3: 字段类型错误 (400)
results.append(test_scenario(
"字段类型错误 (heart_rate为字符串)",
CLOUD_URL,
{
"device_id": "test_device",
"upload_time": "2026-01-12T10:00:00",
"events": [{
"timestamp": current_time,
"heart_rate": "not_a_number", # 故意用字符串
"rmssd": 30,
"sdnn": 45
}],
"summary": {}
},
{
"Authorization": "Bearer edge_device_key_001",
"Content-Type": "application/json"
},
400
))
# 总结
print("\n" + "="*60)
print("📊 测试总结")
print("="*60)
print(f"总共测试: {len(results)} 个场景")
print(f"通过: {sum(results)}")
print(f"失败: {len(results) - sum(results)}")
if all(results):
print("\n✅ 所有异常场景测试通过!")
return True
else:
print("\n⚠️ 部分测试未通过,请查看详细日志")
return False
if __name__ == '__main__':
success = main()
exit(0 if success else 1)