第十个 Skill|ATIR 多接口执行与证据回填
执行人工、项目 Pack 或 Skill 生成的 ATIR 多接口工作流,完成动态参数传递、确定性断言、证据保存和结果回填。v0.1.2 的确定性 compile 主要生成单接口骨架;不能仅凭 OpenAPI 自动可靠生成完整业务链路,登录识别、动态依赖以及 token/order_id 链路仍需项目规则或人工确认。
测试工程师常从一份不完整接口文档开始,随后才逐步拿到需求、环境、账号、成功样例、历史用例、源码和数据库规则。本项目把这些资料增量编译为统一 ATIR 协议,并由确定性 Runner 发出真实 REST 请求。它不会根据真实响应反推预期,也不会在没有证据时生成“看起来执行过”的报告。
HTTP 200 只证明传输层满足预期,不等于业务成功。业务结论必须来自带来源、引用和可信度的独立断言。网络、DNS、超时、502/503/504 等基础设施问题分类为 infrastructure_error,不冒充接口 Bug。
SKILL.md:识别资料、判断 readiness、编译 ATIR、执行门禁、调用 Runner、读取精简摘要。multi-apiRunner:解析协议、管理变量、真实请求、确定性断言、有限重试/轮询、脱敏证据和报告。
LLM 可以分析非结构化资料并提出候选规则;它不发送请求、不决定最终 passed/failed、不模拟证据。
以下状态来自 GitHub Actions 原生 Runner 与真实数据库 service,不是仅解析 workflow 配置:
| 平台或依赖 | 状态 | 验证范围 |
|---|---|---|
| Windows x64 | 已真实验证 | Python 3.11–3.13、离线 Bundle、doctor、本地 Mock E2E |
| Linux x64 | 已真实验证 | Python 3.11–3.13、SIGINT、离线 Bundle、doctor、本地 Mock E2E |
| macOS x64 | 已真实验证 | Intel 原生 Runner、Python 3.11–3.13、SIGINT、离线 Bundle、doctor、本地 Mock E2E |
| macOS arm64 | 未验证 | v0.1.0 不发布 arm64 产物 |
| SQLite | 已真实验证 | 只读 post-check 与完整 E2E |
| PostgreSQL 17 | 已真实验证 | GitHub service、参数绑定、只读事务与 SQL 门禁 |
| MySQL 8.4 | 已真实验证 | GitHub service、参数绑定、只读事务与 SQL 门禁 |
| 等级 | 资料 | 可信能力 |
|---|---|---|
| L1 | 接口文档 | 路径/参数/结构、连通性、明确 HTTP 状态与 Schema;不编造业务码 |
| L2 | L1 + 需求 | 主流程、边界、权限、状态与有来源业务断言;冲突标记 |
| L3 | L2 + 环境/账号/成功样例 | 执行已确认的登录、动态变量与多接口工作流并保存证据 |
| L4 | L3 + 源码/数据库/产品确认 | 只读数据库、状态/副作用/幂等与更高可信断言 |
当前确定性输入支持 OpenAPI 3/Swagger、Postman 2.1、Apifox OpenAPI 导出、通用 JSON、基础 Markdown 与基础 Excel 用例映射。Postman 是基础请求轮廓导入;Markdown 是 Method/Path 保守提取,不生成虚假参数或断言;Excel 是基础用例映射与结果副本回填,不能直接编译时返回 manual_conversion_required;Apifox 确定性支持 OpenAPI 导出。
要求 Python 3.11-3.13。安装阶段创建隔离环境并安装 Runner 与全部依赖;后续执行不会运行 pip install、自动更新或下载组件。
当前发布包不提供自动安装钩子:下载或安装 Skill Bundle 后,用户需要手动执行一次对应平台的安装命令;之后 Skill 复用已安装 Runner,不会重复安装。
Windows PowerShell:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\installers\install.ps1
& "$env:LOCALAPPDATA\multi-api-test-executor\multi-api.cmd" doctor --quick
& "$env:LOCALAPPDATA\multi-api-test-executor\multi-api.cmd" install-infomacOS / Linux:
sh installers/install.sh
"${XDG_DATA_HOME:-$HOME/.local/share}/multi-api-test-executor/multi-api" doctor --quickRelease 离线包包含 wheel、依赖 wheelhouse、Schema、模板、Skill 和本地示例。解压后安装器优先使用 --no-index --find-links wheelhouse。源码目录不带 wheelhouse 时,安装阶段允许从已配置 Python 包源取一次依赖。
终端一启动本地 Mock:
.\.venv\Scripts\python.exe examples\login-create-query\mock_api.py终端二执行完整链路:
.\.venv\Scripts\multi-api.exe doctor --quick
.\.venv\Scripts\multi-api.exe preflight examples\login-create-query\workflow.yaml --approve-risk P0
.\.venv\Scripts\multi-api.exe preview examples\login-create-query\workflow.yaml
.\.venv\Scripts\multi-api.exe run examples\login-create-query\workflow.yaml --approve-risk P0真实路径为:登录 → token → 用户 → 创建订单 → order_id → 查询 → 支付 → 有限轮询 paid → 脱敏证据 → JSON/HTML/JUnit。
multi-api detect INPUT
multi-api import INPUT --output build/interfaces.json
multi-api readiness --interfaces build/interfaces.json --requirements requirements.md
multi-api compile --input openapi.json --base-url ${env.BASE_URL} --output build/workflow.yaml
multi-api preflight build/workflow.yaml --env-file .env
multi-api preview build/workflow.yaml
multi-api run build/workflow.yaml --env-file .env [--approve-risk P1|P0]
multi-api report evidence/RUN_ID/summary.json
multi-api auto --input openapi.json --env-file .env
multi-api doctor [--quick]
multi-api install-info
multi-api version
multi-api cache status
multi-api cache clear
auto 对确定性生成的 HTTP-only 骨架始终停在 preview,并输出 {"status":"compile_only","reason":"business_assertion_missing"};它不会自动发送后续写请求或把 HTTP 成功描述成业务通过。
- 模式字段支持 quick/standard/deep;v0.1 Runner 共享同一确定性执行内核。
assertion_unknown默认阻断依赖步骤;仅在显式开启 continuation、测试环境、必需提取成功且所有剩余步骤都是安全只读时才可继续。任何后续 P0/P1 写操作(包括普通 POST/PUT/PATCH)均不得发送,即使已批准 P1。- 请求支持 GET/POST/PUT/PATCH/DELETE、JSON、query、header、form、Cookie/session,以及 JMESPath/header/cookie/regex 提取。
- 断言支持 HTTP、JSON 存在/值/类型、JSON Schema、跨步骤期望解析和有限 eventual 轮询。
- 只有网络/超时和 502/503/504 可有限重试;400 和业务响应不重试。
- P3 测试环境自动;P2 可在 preview 后执行;P1/P0 必须显式批准;生产默认禁止。
- 数据库核验只接受参数绑定的单条 SELECT 或 WITH...SELECT;不提供写数据库路径。
每次运行创建独立目录:
evidence/RUN_ID/
├── summary.json
├── report.html
├── junit.xml
└── workflows/WORKFLOW/STEP/evidence.json
请求、响应、断言、提取结果和每次轮询都来自真实执行。Authorization、Cookie、Set-Cookie、token、password、secret 与 api_key 递归脱敏。Excel 回填写入新文件,绝不默认覆盖原件。
编译缓存键由输入文件内容、项目名和 base URL 的 SHA-256 构成。输入未变化时复用 ATIR;任一可信输入变化时自动失效。执行结果与凭据不进入编译缓存。
post_checks可对 SQLite 执行真实只读参数化查询,并对行数、字段值断言;PostgreSQL/MySQL 适配使用只读事务并配置 CI service 验证。- 首次 Ctrl+C 优雅取消并保存部分证据、summary 和 manifest;第二次写最小标记后退出。退出码 4。
- cleanup 是独立审计阶段,只接受本次步骤提取的资源 ID;404 为
already_absent,失败不覆盖business_status。 - PluginLoader 与 Protocol 已存在,但 v0.1.2 的 auth、crypto、verifier、data_factory、cleanup 尚未全部接入 Runner 项目配置;当前插件能力为 SDK Preview,不宣传为成熟可直接配置的插件系统,完整接入计划放在 v0.2。
- HTML 展示 readiness、冲突、数据库、cleanup、插件、人工核验、取消和截断并自动转义。Codex 默认仅读取受限的
summary_for_ai.json。
退出码:0 通过,1 测试/断言/cleanup 失败,2 输入或 preflight 错误,3 基础设施错误,4 用户取消,5 部分完成/预算耗尽,6 内部错误。
默认限制包括数据库 100 行、单字段 10,000 字符、查询 10 秒、HTTP 响应 10 MiB、OpenAPI 20 MiB/32 层引用。SSRF 策略为 local_test、enterprise_internal、public 或 strict。
Runner 定位优先级:MULTI_API_RUNNER_PATH、PATH、Windows %LOCALAPPDATA%\multi-api-test-executor\multi-api.cmd、macOS/Linux ${XDG_DATA_HOME:-$HOME/.local/share}/multi-api-test-executor/multi-api。Skill 0.1.x 兼容 Runner >=0.1.0,<0.2.0,不会自动升级或在 run 阶段安装。
GitHub Actions 已在 Windows、Linux、macOS 的 Python 3.11–3.13 上真实运行;PostgreSQL 17、MySQL 8.4、Linux/macOS SIGINT 以及三个已发布平台的离线安装和 Mock E2E 均通过。
- v0.1 聚焦 REST,不支持 UI、gRPC 或 WebSocket 执行。
- Windows 合作式取消已覆盖;GitHub Windows Runner 无法可靠完成原生双 Ctrl+C E2E,因此该项仍为已知限制。
- Postman 仅导入基础请求轮廓且 JavaScript 不执行;远程 OpenAPI
$ref默认关闭;插件为 SDK Preview,尚未全部接入 Runner 项目配置。 - Markdown 是保守的 Method/Path 提取,不理解任意自然语言表格。
- Excel 仅支持基础列映射和结果副本回填。
- Apifox 仅确定性支持其 OpenAPI 导出格式。
- macOS v0.1.0 仅发布已在 Intel 原生 Runner 验证的 x64 产物,不宣称 arm64 支持。
2026-07-21 在 Windows x64、Python 3.14.0 的实际测量如下(完整 JSON 见 docs/benchmark-2026-07-21.json):
其中 100 接口与 20 请求样本由程序生成,仅用于可重复的本地微基准,不代表真实大型企业接口文档或生产负载性能。
| 阶段 | Mean | P50 | P95 |
|---|---|---|---|
| 解析 100 个 OpenAPI 接口 | 1.735 ms | 1.829 ms | 2.226 ms |
| 编译 100 个接口 | 4.487 ms | 2.356 ms | 13.449 ms |
| 缓存命中 | 1.144 ms | 1.193 ms | 1.451 ms |
| 执行 20 请求,并发 1 | 312.763 ms | 311.056 ms | 317.496 ms |
| 执行 20 请求,并发 5 | 106.552 ms | 117.622 ms | 132.857 ms |
| HTML 报告 | 0.968 ms | 0.939 ms | 1.249 ms |
| doctor --quick | 373.709 ms | 387.281 ms | 463.725 ms |
| CLI 启动 | 289.223 ms | 274.630 ms | 365.134 ms |
缓存命中率和请求成功率均为 100%。最慢阶段是 doctor --quick;通过 CLI 懒加载后其 P95 低于 0.5 秒。运行 python scripts/benchmark.py 可在当前机器重新获取真实数据。
- 先运行
multi-api doctor --quick。 blocked:检查未解析变量、风险批准、生产门禁、DAG 或规则冲突。infrastructure_error:检查 DNS、连接、证书、代理、超时及 502/503/504 步骤证据。failed:查看失败断言的 source、expected、actual;不要把实际值改成期望值。- 安装损坏:重新运行同一版本安装器;运行期间不要修复或更新依赖。
高价值后续:v0.2 完整项目插件接入、更强的业务链路规则、Ctrl+C 跨平台验证与签名离线包。贡献请先增加失败测试,保持 ATIR 向后兼容,禁止提交真实密钥、伪造证据或虚假 benchmark。