Skip to content

Saitamasans/skill-multi-api-test-executor

Repository files navigation

multi-api-test-executor

CI

第十个 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 与 Runner

  • SKILL.md:识别资料、判断 readiness、编译 ATIR、执行门禁、调用 Runner、读取精简摘要。
  • multi-api Runner:解析协议、管理变量、真实请求、确定性断言、有限重试/轮询、脱敏证据和报告。

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-L4

等级 资料 可信能力
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-info

macOS / Linux:

sh installers/install.sh
"${XDG_DATA_HOME:-$HOME/.local/share}/multi-api-test-executor/multi-api" doctor --quick

Release 离线包包含 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。

CLI

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;任一可信输入变化时自动失效。执行结果与凭据不进入编译缓存。

当前限制

V0.1 RC 闭环能力

  • 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_testenterprise_internalpublicstrict

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 可在当前机器重新获取真实数据。

故障排查

  1. 先运行 multi-api doctor --quick
  2. blocked:检查未解析变量、风险批准、生产门禁、DAG 或规则冲突。
  3. infrastructure_error:检查 DNS、连接、证书、代理、超时及 502/503/504 步骤证据。
  4. failed:查看失败断言的 source、expected、actual;不要把实际值改成期望值。
  5. 安装损坏:重新运行同一版本安装器;运行期间不要修复或更新依赖。

路线图与贡献

高价值后续:v0.2 完整项目插件接入、更强的业务链路规则、Ctrl+C 跨平台验证与签名离线包。贡献请先增加失败测试,保持 ATIR 向后兼容,禁止提交真实密钥、伪造证据或虚假 benchmark。

许可证:MIT。详见 架构协议断言策略安全安装

About

An execution-oriented Codex Skill and deterministic Runner for compiling API documents into auditable multi-API workflows with assertions, evidence, database checks, cleanup, and offline installation.

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages