任务执行
一个 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"))