SDK 参考
设备管理

设备管理

设备 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()释放所有已占用设备,停止所有心跳