$npx -y skills add TestAny-io/testany-agent-skills --skill testany-executionTestany execution 观测与管理 - 查看进度、查询历史、刷新状态、取消未开始执行、将失败执行交给 debug
| 1 | # Testany Execution Operations |
| 2 | |
| 3 | 管理 Testany 平台上的 **execution**,包括进度观测、历史查询、状态刷新、取消和失败交接。 |
| 4 | |
| 5 | 用户输入: $ARGUMENTS |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | ## 先统一心智模型 |
| 10 | |
| 11 | 在开始之前,先按 [automation-model.md](../testany-guide/references/automation-model.md) 理解边界: |
| 12 | |
| 13 | - `pipeline` 是执行与编排单元 |
| 14 | - `trigger` 负责“怎么发起执行”,包括长期入口和即时运行 |
| 15 | - 本 skill 负责“执行发起之后怎么管理 execution” |
| 16 | - 失败 execution 的根因分析属于 `testany-debug` |
| 17 | |
| 18 | **重要结论**: |
| 19 | - 本 skill 不负责创建 Plan / Manual Trigger / Gatekeeper |
| 20 | - 本 skill 也不负责即时发起一次执行;这属于 `testany-trigger` |
| 21 | - 本 skill 关注 execution lifecycle:看、查、刷、停、交接 |
| 22 | |
| 23 | --- |
| 24 | |
| 25 | ## 职责范围 |
| 26 | |
| 27 | - 查看 execution 详情与 case 级结果 |
| 28 | - 列出/搜索 execution 历史 |
| 29 | - 刷新 execution 状态 |
| 30 | - 轮询等待 execution 进入终态 |
| 31 | - 取消尚未开始的 execution |
| 32 | - 汇总执行结果并决定是否转给 `testany-debug` |
| 33 | - 在需要时获取 execution case 详情与日志签名入口 |
| 34 | |
| 35 | --- |
| 36 | |
| 37 | ## 操作速查 |
| 38 | |
| 39 | | 用户意图 | 操作类型 | MCP 工具 | |
| 40 | |---------|---------|---------| |
| 41 | | 列出执行记录 | Read | `testany_list_executions` | |
| 42 | | 查看执行详情 | Read | `testany_get_execution` | |
| 43 | | 查看某个 case 在执行中的详情 | Read | `testany_get_execution_case` | |
| 44 | | 刷新执行状态 | Update | `testany_refresh_execution` | |
| 45 | | 取消未开始执行 | Update | `testany_cancel_execution` | |
| 46 | | 获取工作空间执行状态汇总 | Read | `testany_get_workspace_execution_status` | |
| 47 | | 获取可筛选状态值 | Read | `testany_filter_execution_status` | |
| 48 | | 获取有执行记录的 pipelines | Read | `testany_filter_execution_pipelines` | |
| 49 | | 获取日志签名 | Read | `testany_log_sign` | |
| 50 | |
| 51 | --- |
| 52 | |
| 53 | ## 核心知识 |
| 54 | |
| 55 | ### 执行状态 |
| 56 | |
| 57 | | 状态 | 值 | 含义 | 是否终态 | |
| 58 | |------|-----|------|---------| |
| 59 | | NOT_STARTED | -1 | 未开始/排队中(等待并发槽位) | 否 | |
| 60 | | RUNNING | 0 | 执行中 | 否 | |
| 61 | | SUCCESS | 1 | 全部通过 | 是 | |
| 62 | | FAILURE | 2 | 有失败 | 是 | |
| 63 | | SKIPPED | 3 | 跳过(仅 Case) | 是 | |
| 64 | | FAIL_AS_EXPECTED | 4 | 预期失败(仅 Case) | 是 | |
| 65 | | CANCELLED | 5 | 已取消 | 是 | |
| 66 | | ERROR | 99 | 系统错误 | 是 | |
| 67 | |
| 68 | ### Workspace 队列状态 |
| 69 | |
| 70 | Testany 使用 workspace 级并发槽位(Redis semaphore)控制 execution 并行度。通过 `testany_get_workspace_execution_status` 可获取: |
| 71 | |
| 72 | | 字段 | 含义 | |
| 73 | |------|------| |
| 74 | | `limit` | workspace 并发上限(Community=2, Paid=4, Enterprise=8,可调) | |
| 75 | | `claimed` | 正在执行的 execution key 列表(已占据槽位) | |
| 76 | | `pending` | 排队中的 execution key 列表(等待槽位) | |
| 77 | |
| 78 | **当用户的 execution 状态为 NOT_STARTED 且长时间不变时**,应主动查询队列状态: |
| 79 | - `claimed` 数量 = `limit` → 槽位已满,该 execution 在 `pending` 中排队 |
| 80 | - `claimed` 中有长时间运行的旧 execution → 旧执行占住了槽位 |
| 81 | |
| 82 | **当用户问"为什么我的 execution 不跑"时**,这是第一个要检查的方向,优先于检查 YAML 和 relay。 |
| 83 | |
| 84 | ### 本 skill 的标准处理链 |
| 85 | |
| 86 | ```text |
| 87 | trigger 已返回 execution_key |
| 88 | -> testany_get_execution / testany_refresh_execution |
| 89 | -> 状态进入终态 |
| 90 | -> 如失败,按需 testany_get_execution_case / testany_log_sign |
| 91 | -> 必要时交给 testany-debug |
| 92 | ``` |
| 93 | |
| 94 | --- |
| 95 | |
| 96 | ## 典型工作流 |
| 97 | |
| 98 | ### 1. 查看单次执行进度 |
| 99 | |
| 100 | 适用输入: |
| 101 | - `execution_key` |
| 102 | - “看这次执行跑到哪了” |
| 103 | |
| 104 | 处理方式: |
| 105 | 1. `testany_get_execution` |
| 106 | 2. 如状态不新鲜或用户要求刷新,`testany_refresh_execution` |
| 107 | 3. 汇报当前状态、开始时间、通过/失败数量 |
| 108 | |
| 109 | ### 2. 轮询等待执行完成 |
| 110 | |
| 111 | 适用输入: |
| 112 | - “帮我盯着这次执行直到结束” |
| 113 | - 已知 `execution_key` |
| 114 | |
| 115 | 处理方式: |
| 116 | 1. `testany_get_execution` |
| 117 | 2. 若未终态,则循环 `testany_refresh_execution` |
| 118 | 3. 直到进入终态或达到超时上限 |
| 119 | |
| 120 | 轮询建议: |
| 121 | - 初始间隔:5 秒 |
| 122 | - 最大间隔:30 秒 |
| 123 | - 默认超时:10-30 分钟,按 pipeline 复杂度调整 |
| 124 | |
| 125 | ### 3. 查看历史执行 |
| 126 | |
| 127 | 适用输入: |
| 128 | - “看最近失败的执行” |
| 129 | - “列出某个 pipeline 的最近执行” |
| 130 | - “看某个 workspace 的执行情况” |
| 131 | |
| 132 | 处理方式: |
| 133 | 1. 视条件调用 `testany_filter_execution_status` / `testany_filter_execution_pipelines` |
| 134 | 2. `testany_list_executions` |
| 135 | 3. 必要时再 `testany_get_execution` |
| 136 | |
| 137 | 常用过滤维度: |
| 138 | - `workspace` |
| 139 | - `pipeline_key` |
| 140 | - `status` |
| 141 | - `triggered_by` |
| 142 | - `env` |
| 143 | - `exe_start_time_from` / `exe_start_time_to` |
| 144 | |
| 145 | ### 4. 取消 execution |
| 146 | |
| 147 | 适用输入: |
| 148 | - “取消这次还没开始的执行” |
| 149 | |
| 150 | 处理方式: |
| 151 | 1. `testany_get_execution` |
| 152 | 2. 仅当状态仍是未开始 / pending 时,调用 `testany_cancel_execution` |
| 153 | 3. 如果已经开始运行,明确告知不能取消 |
| 154 | |
| 155 | ### 5. 查看队列状态 / 诊断 execution 排队 |
| 156 | |
| 157 | 适用输入: |
| 158 | - "为什么我的 execution 不跑" |
| 159 | - "YAML 是并行的但执行串行了" |
| 160 | - "看一下队列状态" |
| 161 | - "execution 一直 NOT_STARTED" |
| 162 | |
| 163 | 处理方式: |
| 164 | 1. `testany_get_workspace_execution_status` → 获取 limit / claimed / pending |
| 165 | 2. 判断并报告: |
| 166 | - claimed 数量是否 = limit(槽位满) |
| 167 | - 用户关注的 execution 是否在 pending 列表中 |
| 168 | - claimed 中是否有长时间运行的旧 execution 占住槽位 |
| 169 | 3. 如果槽位未满但 case 仍串行执行: |
| 170 | - 提示用户检查 pipeline YAML 版本(rule/v1.2 不支持 case 级并行) |
| 171 | - 建议查看 case 的 start_time/finish_time 确认是否被串行调度 |
| 172 | - 如需深入分析,切到 `testany-debug`(调度/队列诊断分支) |
| 173 | |
| 174 | ### 6. 将失败执行交给 debug |
| 175 | |
| 176 | 适用输入: |
| 177 | - “这个执行为什么失败” |
| 178 | - “帮我定位失败 case” |
| 179 | |
| 180 | 处理方式: |
| 181 | 1. `testany_get_execution` |
| 182 | 2. 找出失败 case |
| 183 | 3. 如只需要定位,先 `testany_get_execution_case` |
| 184 | 4. 如需要根因分析与日志解读,切到 `testany-debug` |
| 185 | |
| 186 | --- |
| 187 | |
| 188 | ## 边界澄清 |
| 189 | |
| 190 | ### 什么时候去 `testany-trigger` |
| 191 | |
| 192 | 以下场景不属于本 skill: |
| 193 | - 现在立刻执行一次 pipeline |
| 194 | - 给 pipeline 配 Plan |
| 195 | - 创建 Manual Trigger |
| 196 | - 创建 Gatekeeper |
| 197 | |
| 198 | 这些都应切到 `testany-trigger`。 |
| 199 | |
| 200 | ### 什么时候去 `testany-debug` |
| 201 | |
| 202 | 以下场景应转给 `testany-debug`: |
| 203 | - 用户要看失败根因 |
| 204 | - 用户要读取与分析日志 |
| 205 | - 用户要判断是断言失败、超时、依赖错误还是基础设施问题 |
| 206 | |
| 207 | --- |
| 208 | |
| 209 | ## 返回格式 |
| 210 | |
| 211 | 任务完成后,向用户汇报: |
| 212 | - Execution Key(如 `Y2K-0601-0000B`) |
| 213 | - 所属 Pipeline |
| 214 | - 当前状态或终态结果 |
| 215 | - 通过/失败/跳过数量 |
| 216 | - 失败 case 列表(如有) |
| 217 | - 是否可取消 / 是否已取消 |
| 218 | - 下一步建议: |
| 219 | - 需要继续触发执行 → 去 `testany-trigger` |
| 220 | - 需要分析失败原因 → 去 `testany-debug` |
| 221 | |
| 222 | --- |
| 223 | |
| 224 | ## 参考文档 |
| 225 | |
| 226 | - [Testany 自动化对象模型](../testany-guide/references/automation-model.md) |
| 227 | - [核心概念](../testany-guide/references/concepts.md) |