multica-platform-apifox · git:20260910.8db057c · 2026-09-10 · sha256 babc2671a4d9f60d

multica-platform-apifox git:20260910.8db057cA

Immutable. This exact content is served forever at /api/v1/blob/babc2671a4d9f60d.

---
name: multica-platform-apifox
description: Apifox 读写:OpenAPI 导入同步、接口打标、场景用例补充、T3 自动化跑批。平台 skill,测试/前端/后端共用;由产物编排 skill 按名调用。
metadata:
  credentials:
    priority:
      - APIFOX_ACCESS_TOKEN
  runtime:
    node: ">=18"
    external:
      - apifox-cli  # npm install -g apifox-cli
---

# Platform · Apifox

## Platform 协作

本 skill 为 **platform 层**;供 `multica-artifact-backend`、`multica-test-t1-design`、`multica-test-t3-api-automation` 等按名调用。凭据:`APIFOX_ACCESS_TOKEN`。

## Purpose

Apifox **读 + 写**统一能力,供 **@Tester / @BackendDev / @FrontendDev** 按名挂载:

| 能力 | 脚本 | 典型调用方 |
| --- | --- | --- |
| **OpenAPI 同步**(增/改/删 + 打标) | `scripts/sync_openapi.js` | @BackendDev 契约发布后 |
| **接口场景补充**(T1 并行) | `scripts/*.js`(见 `references/supplement-workflow.md`) | @Tester |
| **T3 自动化跑批** | `scripts/run_apifox.py` | @Tester(经 `multica-test-t3-api-automation`) |

> **跨平台**:Node 脚本 + Python runner;`npm install -g apifox-cli`。私有化基址见 `config.yaml` → `api_base_url`(默认 `https://apifox.example.com`)。

## Files

```text
multica-platform-apifox/
├── SKILL.md
├── config.yaml
├── .env.example
├── references/
│   ├── supplement-workflow.md
│   ├── reference.md
│   ├── agent-instructions.md
│   └── CHANGELOG.md
├── tests/                        # node --test tests/*.test.js
├── .apifox/
│   └── systems-registry.example.json
└── scripts/
    ├── sync_openapi.js           # OpenAPI 导入 + 打标 + 删 orphan
    ├── run_apifox.py             # T3 场景/套件跑批
    ├── lib/apifox.js             # CLI JSON 封装
    ├── systems-registry.js       # 系统名 ↔ projectId 登记
    ├── discover-auth.js
    ├── discover-scenario-target.js
    ├── generate-cases.js
    ├── append-to-scenario.js
    ├── safe-update-case.js
    └── validate-config.js
```

## 凭据

| 变量 | 说明 |
| --- | --- |
| `APIFOX_ACCESS_TOKEN` | Apifox CLI token(**禁止**写入 SKILL / Git) |
| `APIFOX_PROJECT_ID` | 当前项目数字 ID |
| `APIFOX_SOURCE_BRANCH` | 创建 AI 分支时的 **源分支**(默认 `main`),不是 sync 目标 |
| `APIFOX_BRANCH` | 本次写入的 **目标 AI 分支**(OpenAPI sync / 场景脚本必填) |
| `APIFOX_API_BASE_URL` | 私有化基址,覆盖 config |
| `APIFOX_OPERATOR` | 操作者简称(多人登记隔离) |

## Write · OpenAPI 同步(Backend / FE 契约)

Backend 发布 `openapi.json`(或从 `api-contract.md` 导出)后:

```bash
npm install -g apifox-cli
set APIFOX_ACCESS_TOKEN=<token>
set APIFOX_PROJECT_ID=<projectId>

node scripts/sync_openapi.js \
  --file docs/backend/<ISSUE-KEY>/openapi.json \
  --issue <ISSUE-KEY> \
  --tag <ISSUE-KEY> \
  --branch ai/<ISSUE-KEY>-openapi-<YYYYMMDD> \
  --json
```

**分支(强制)**:每次 OpenAPI 同步须 **新建** AI 分支,禁止直写 `main`。完整步骤见 [`references/openapi-branch-workflow.md`](references/openapi-branch-workflow.md)。

行为:

1. **导入** — `apifox import --format openapi`(增/改)
2. **打标** — 对 OpenAPI 内每条 path+method 匹配 endpoint,`endpoint update --tags` 追加 Issue tag
3. **删除** — 导出带该 tag 的 endpoint,与本次 OpenAPI 对比,多余者 `endpoint delete`(仅删带该 tag 的 orphan)

回传 JSON:`imported` / `tagged` / `deleted` / `errors`。

## Write · 接口场景补充(Tester T1 并行)

完整步骤见 `references/supplement-workflow.md`;断言/错误见 `reference.md`;Agent 指令见 `references/agent-instructions.md`。

回归测试:`node --test tests/*.test.js`(见 `tests/README.md`)。

要点:

- 任务卡片对齐 `projectId` / 环境 / 接口 / 写入意图
- `systems-registry.js lookup` 解析项目
- **禁止** patch 修改 `path/method/apiDetailId`
- 场景挂载:同一 endpoint 默认 **append-existing**,不重复建场景
- T3 跑批走 `run_apifox.py`,不在本 skill 出 PASS/FAIL 验收结论

## Run · T3 自动化

```bash
pip install -r scripts/requirements.txt
python scripts/run_apifox.py \
  --issue AAI-2466 \
  --base-url "https://sit.example.com" \
  --json
```

`multica-test-t3-api-automation` 薄编排调用本脚本;配置见 `config.yaml`(scenario / environment 映射)。

## Read

```bash
apifox endpoint list --project <id> --access-token <token>
apifox test-scenario list --project <id>
```

## 为什么有效

Apifox 能力从角色提示词剥离,测试/后端/前端共用同一 platform skill;OpenAPI 同步与用例补充分轨,避免 supplement 流程误改接口定义。