设备管理
设备 API 是全局资源,不需要指定项目 ID。
设备通过序列号(device_id)标识,如 R58N30ABCDE(Android)、00008110-001A256E3C28001E(iOS)。
查询设备列表
from pandatest import PandaTest
client = PandaTest(api_key="pk_xxx", base_url="https://your-domain.com")
# 获取所有设备
devices = client.devices.list()
# 带过滤
devices = client.devices.list(
platform="android",
status="online",
search="Pixel",
)
for d in devices:
lock = d.get("lock", {}) or {}
locked = "locked" if lock.get("locked") else "free"
print(f"{d['name']} ({d['platform']}) — {d['status']} [{locked}]")获取设备详情
仅在 SDK 中可用:
from pandatest import PandaTest
client = PandaTest(api_key="pk_xxx", base_url="https://your-domain.com")
device = client.devices.get("R58N30ABCDE")
print(f"{device['name']} ({device['platform']} {device['version']})")
print(f"Status: {device['status']}")占用设备
device_id = "R58N30ABCDE"
data = client.devices.acquire(device_id)
print(f"Lease token: {data['lease_token']}")SDK 的 acquire() 会自动启动后台心跳线程保活,无需手动续期。
还可传入可选参数:
data = client.devices.acquire(
device_id,
ttl=1800, # 锁超时(秒),可选
request_id="my-run-1", # 幂等请求 ID,可选
metadata={"pipeline": "nightly"},
)释放设备
device_id = "R58N30ABCDE"
# 无需传 token —— SDK 自动记住 acquire 返回的 lease_token
client.devices.release(device_id)推荐使用 try/finally 模式:
device_id = "R58N30ABCDE"
client.devices.acquire(device_id)
try:
# 执行自动化任务
pass
finally:
client.devices.release(device_id)
client.close()查询设备锁状态
device_id = "R58N30ABCDE"
data = client.devices.lock_status(device_id)
lock = data.get("lock", {})
print(f"Device: {data['device_id']}")
print(f"Status: {data['device_status']}")
print(f"Locked: {lock.get('locked', False)}")
if lock.get("locked"):
print(f"TTL: {lock['ttl']}s")更多 SDK 方法
以下方法仅在 SDK 中可用:
| 方法 | 说明 |
|---|---|
client.devices.get(device_id) | 获取单个设备详情 |
client.devices.remote_debug_start(device_id) | 启动 ADB 远程调试代理 |
client.devices.remote_debug_stop(device_id) | 停止 ADB 远程调试代理 |
client.devices.close() | 释放所有已占用设备,停止所有心跳 |