""" 工作手机SDK v3.0 - API测试 """ import httpx import asyncio BASE_URL = "http://localhost:8899" API_KEY = "workphone-secret-key-2026" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } async def check_health(): """测试健康检查""" async with httpx.AsyncClient() as client: resp = await client.get(f"{BASE_URL}/health") print("健康检查:", resp.json()) assert resp.status_code == 200 async def check_devices(): """测试设备列表""" async with httpx.AsyncClient() as client: resp = await client.get(f"{BASE_URL}/api/v3/devices", headers=headers) print("设备列表:", resp.json()) assert resp.status_code == 200 async def check_send_message(): """测试发送消息(模拟)""" async with httpx.AsyncClient() as client: resp = await client.post( f"{BASE_URL}/api/v3/message/send", headers=headers, json={ "device_id": "test-device", "platform": "wechat", "to_id": "测试联系人", "content": "测试消息", "msg_type": "text" } ) data = resp.json() print("发送消息:", data) assert resp.status_code == 200 assert data.get("code") == 200 assert "data" in data assert "success" in data["data"] if not data["data"]["success"] and data["data"].get("error"): assert data["data"].get("error_code") in (None, "timeout", "contact_not_found") if data["data"].get("timeout_seconds"): assert isinstance(data["data"]["timeout_seconds"], (int, type(None))) async def check_batch_send_message(): """测试批量发送消息(契约:data.sent + data.failed + data.total)""" async with httpx.AsyncClient(timeout=30) as client: resp = await client.post( f"{BASE_URL}/api/v3/message/batch-send", headers=headers, json={ "device_id": "test-device", "platform": "wechat", "to_ids": ["A", "B"], "content": "batch test", "msg_type": "text", "interval": 1.0 } ) data = resp.json() print("批量发消息:", data) assert resp.status_code in [200, 503] if resp.status_code == 200: assert data.get("code") == 200 d = data.get("data", {}) assert "sent" in d and "failed" in d and "total" in d assert d["total"] == 2 assert len(d["sent"]) + len(d["failed"]) == 2 async def check_agent_execute(): """测试AI Agent(模拟)""" async with httpx.AsyncClient() as client: resp = await client.post( f"{BASE_URL}/api/v3/agent/execute", headers=headers, json={ "device_id": "test-device", "task": "打开微信", "llm_provider": "deepseek", "max_steps": 10 }, timeout=60 ) print("AI Agent:", resp.json()) async def main(): """运行所有测试""" print("=" * 50) print("工作手机SDK v3.0 API测试") print("=" * 50) try: await check_health() print("✅ 健康检查通过\n") except Exception as e: print(f"❌ 健康检查失败: {e}\n") try: await check_devices() print("✅ 设备列表通过\n") except Exception as e: print(f"❌ 设备列表失败: {e}\n") try: await check_send_message() print("✅ 发送消息通过\n") except Exception as e: print(f"❌ 发送消息失败: {e}\n") try: await check_batch_send_message() print("✅ 批量发消息通过\n") except Exception as e: print(f"❌ 批量发消息失败: {e}\n") try: await check_agent_execute() print("✅ AI Agent通过\n") except Exception as e: print(f"❌ AI Agent失败: {e}\n") print("=" * 50) print("测试完成") if __name__ == "__main__": asyncio.run(main())