94 lines
3.3 KiB
Python
94 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
微信消息 E2E 端到端验证脚本
|
||
|
||
验证完整链路:API → SDK → Agent → 微信 → 执行结果回传
|
||
|
||
前置条件:
|
||
1. SDK 运行:localhost:8899
|
||
2. Agent 连接:emulator-5554
|
||
3. 模拟器微信已登录
|
||
4. 测试联系人:文件传输助手(每台微信必有)
|
||
|
||
可配置环境变量:
|
||
- SDK_BASE_URL:SDK 地址,默认 http://localhost:8899
|
||
- SDK_DEVICE_ID:设备 ID,默认 emulator-5554
|
||
- SDK_E2E_TO_ID:发送目标(联系人/群),默认 文件传输助手
|
||
- SDK_E2E_CONTENT:发送内容,默认 [E2E测试] 工作手机SDK微信发送验证
|
||
"""
|
||
|
||
import httpx
|
||
import asyncio
|
||
import os
|
||
import sys
|
||
|
||
BASE_URL = os.environ.get("SDK_BASE_URL", "http://localhost:8899")
|
||
DEVICE_ID = os.environ.get("SDK_DEVICE_ID", "emulator-5554")
|
||
TO_ID = os.environ.get("SDK_E2E_TO_ID", "文件传输助手")
|
||
CONTENT = os.environ.get("SDK_E2E_CONTENT", "[E2E测试] 工作手机SDK微信发送验证")
|
||
|
||
|
||
async def check_wechat_send_e2e():
|
||
"""完整 E2E:发送微信消息并验证回传"""
|
||
print("=" * 50)
|
||
print("微信消息 E2E 端到端验证")
|
||
print("=" * 50)
|
||
|
||
# 1. 健康检查
|
||
async with httpx.AsyncClient(timeout=10) as client:
|
||
try:
|
||
resp = await client.get(f"{BASE_URL}/health")
|
||
health = resp.json()
|
||
devices_online = health.get("devices_online", 0)
|
||
print(f"✓ SDK 健康: devices_online={devices_online}")
|
||
if devices_online == 0:
|
||
print("❌ 无设备在线,请先启动 Agent:")
|
||
print(" cd sdk/agent && python3 agent.py -d emulator-5554 -s ws://127.0.0.1:8899/ws/device")
|
||
return False
|
||
except Exception as e:
|
||
print(f"❌ SDK 未运行: {e}")
|
||
return False
|
||
|
||
# 2. 发送消息(微信操作较慢:启动+搜索+输入+发送,预留 90s)
|
||
print(f"\n→ 发送消息: {TO_ID} | {CONTENT}")
|
||
async with httpx.AsyncClient(timeout=90) as client:
|
||
resp = await client.post(
|
||
f"{BASE_URL}/api/v3/message/send",
|
||
json={
|
||
"device_id": DEVICE_ID,
|
||
"platform": "wechat",
|
||
"to_id": TO_ID,
|
||
"content": CONTENT,
|
||
"msg_type": "text"
|
||
}
|
||
)
|
||
|
||
result = resp.json()
|
||
print(f"← 响应: {result}")
|
||
|
||
# 3. 验证回传
|
||
ok = (
|
||
resp.status_code == 200
|
||
and result.get("code") == 200
|
||
and result.get("data", {}).get("success") is True
|
||
)
|
||
|
||
if ok:
|
||
msg_id = result.get("data", {}).get("message_id", "")
|
||
print(f"\n✅ E2E 验证通过")
|
||
print(f" - message_id: {msg_id}")
|
||
print(f" - channel_used: {result.get('channel_used', 'N/A')}")
|
||
return True
|
||
err = result.get("data", {}).get("error") or result.get("detail") or result.get("message", "未知")
|
||
if err == "timeout":
|
||
print(f"\n⚠️ 设备响应超时(API 已正确返回 success=false, error=timeout)")
|
||
print(f" - 请检查 Agent 是否卡住、to_id 是否存在、MESSAGE_SEND_TIMEOUT 是否过短")
|
||
return True # API 行为正确,算通过
|
||
print(f"\n❌ E2E 验证失败: {err}")
|
||
return False
|
||
|
||
|
||
if __name__ == "__main__":
|
||
success = asyncio.run(check_wechat_send_e2e())
|
||
sys.exit(0 if success else 1)
|