2026-01-13 11:27:21 +08:00

114 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""异常场景测试脚本"""
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)