SDK 参考
任务执行

任务执行

一个 Job 是一次构建触发的执行记录,包含多个 Task(每个 Task 对应一台设备上的执行)。

Jobs

列出 Job

from pandatest import PandaTest
 
client = PandaTest(api_key="pk_xxx", base_url="https://your-domain.com")
scope = client.project(2)
 
# 列出所有 Job
result = scope.jobs.list(page=1, page_size=20)
 
# 按构建和状态过滤
result = scope.jobs.list(build_id="build-14-abc123", status="failed")
 
for job in result.items:
    print(f"{job.id}: {job.status} ({job.progress}%)")

获取 Job 详情

job = scope.jobs.get("job-42-xyz789")
print(f"Status: {job.status}")
print(f"Progress: {job.progress}%")
print(f"Tasks: {job.success_tasks}/{job.total_tasks} passed")
print(f"Pass rate: {job.pass_rate}%")
print(f"Duration: {job.duration}s")

取消 Job

result = scope.jobs.cancel("job-42-xyz789")
print(f"Cancelled tasks: {result['cancelled_tasks']}")

重新运行 Job

result = scope.jobs.rerun("job-42-xyz789")
print(f"New Job ID: {result['new_job_id']}")

等待 Job 完成

# 简单等待
job = scope.jobs.wait("job-42-xyz789", timeout=600)
print(f"Final status: {job.status}")
 
# 带进度回调
def on_progress(job):
    print(f"  {job.status}: {job.progress}% "
          f"({job.success_tasks}/{job.total_tasks})")
 
job = scope.jobs.wait(
    "job-42-xyz789",
    timeout=600,
    interval=5.0,
    max_interval=15.0,
    on_progress=on_progress,
)

更多 SDK 方法

以下方法仅在 SDK 中可用:

方法说明
scope.jobs.tasks(id)获取 Job 下的所有 Task
scope.jobs.report_summary(id)获取 Job 报告摘要
scope.jobs.share(id, action=, expires_days=)创建/禁用分享链接
scope.jobs.share_status(id)获取分享状态

Tasks

Task 是 Job 下的子任务,每个 Task 代表在一台设备上的测试执行。

列出 Task

# 按 Job 过滤
result = scope.tasks.list(job_id="job-42-xyz789")
 
for task in result.items:
    print(f"{task.device_name} ({task.device_platform}): {task.status}")

获取 Task 详情

task = scope.tasks.get("task-101-aaa")
print(f"Device: {task.device_name} ({task.device_platform} {task.device_version})")
print(f"Status: {task.status}, Progress: {task.progress}%")
if task.error_message:
    print(f"Error: {task.error_message}")

获取 Task 日志

result = scope.tasks.logs("task-101-aaa")
print(result.get("logs_url"))
print(result.get("logs"))