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