AI 大模型接入 + 自动化测试(手动/AI/定时三种触发)
- 自动化测试核心(packages/core/src/testing.ts):
- JSONPath 求值($.a.b[0].c)、断言评估(状态码/耗时/Header/Body × 10 种操作)
- 变量提取(响应 → 当前环境,{{var}} 链式传值)、Markdown 报告导出
- 用例模型:场景用例 = 有序步骤(引用 HTTP 接口 + 断言 + 提取),失败后继续可选
- 执行器 testRunner + 定时调度器 scheduler(应用运行期间按间隔自动执行)
- TestingView:用例列表 / 步骤编排 / 断言与提取编辑器 / 报告(统计卡+断言明细+过滤+再次运行+导出)
- AI 助手:OpenAI 兼容客户端(DeepSeek/智谱/Kimi/OpenAI/Ollama 预设)
- 设置 → AI 助手:供应商 CRUD + 测试连接 + 当前使用切换
- AI 生成场景用例:读取集合接口清单 → 编排步骤/断言/提取 → 预览保存
- 入口:侧栏底部「自动化测试」+ ⋯ 菜单;文档新增 /docs/testing /docs/ai
- 新增 11 个引擎单测(总 48 前端用例全绿);本地 E2E:运行通过+断言通过+petId 提取验证
This commit is contained in:
1 parent
9a019408ab
commit
1bcd7be2ac
23 files changed
+2538
-7
No files matched your search
@@ -0,0 +1,75 @@
|
||||
本地服务(Gin)默认监听 `:8787`,可用环境变量 `OPSXAPI_ADDR` 修改。所有端点仅监听本机回环,供 Web UI 与桌面端调用。
|
||||
|
||||
## 端点总览
|
||||
|
||||
| 方法 | 路径 | 用途 |
|
||||
| --- | --- | --- |
|
||||
| GET | `/health` | 健康检查 |
|
||||
| POST | `/v1/proxy/http` | HTTP 代理(全方法、自定义头、超时) |
|
||||
| POST | `/v1/proxy/http/stream` | NDJSON 流式代理(SSE / chunked 透传) |
|
||||
| POST | `/v1/proxy/ws/connect` | 建立到目标 WS 的隧道会话 |
|
||||
| GET | `/v1/proxy/ws/attach` | 浏览器 attach 到隧道会话(双向桥接) |
|
||||
| POST | `/v1/proxy/ws/close` | 关闭隧道会话 |
|
||||
| GET | `/docs` | 本文档站 |
|
||||
|
||||
## HTTP 代理
|
||||
|
||||
```bash
|
||||
curl -s -X POST http://127.0.0.1:8787/v1/proxy/http \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"method":"GET","url":"https://httpbin.org/get","headers":{}}'
|
||||
```
|
||||
|
||||
响应:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": 200,
|
||||
"headers": { "content-type": "application/json" },
|
||||
"body": "{ ... }",
|
||||
"timeMs": 320,
|
||||
"size": 274
|
||||
}
|
||||
```
|
||||
|
||||
请求体 `body.mode` 支持 `json` / `xml` / `text` / `html` / `urlencoded` / `form-data`,`raw` 为原始报文;`timeoutMs` 可选。
|
||||
|
||||
## 流式代理
|
||||
|
||||
请求体与 HTTP 代理一致,响应为 NDJSON 事件流:
|
||||
|
||||
```text
|
||||
{"type":"meta","status":200,"headers":{...}}
|
||||
{"type":"chunk","data":"<base64>","size":1024}
|
||||
{"type":"end","timeMs":1200,"size":8192}
|
||||
```
|
||||
|
||||
## WebSocket 隧道
|
||||
|
||||
```bash
|
||||
# 1. 建立会话(可带自定义 Header)
|
||||
curl -s -X POST http://127.0.0.1:8787/v1/proxy/ws/connect \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"url":"wss://echo.example.com","headers":{"Authorization":"Bearer t"}}'
|
||||
# → {"sessionId":"..."}
|
||||
|
||||
# 2. 浏览器 / 客户端 attach(普通 WebSocket)
|
||||
# ws://127.0.0.1:8787/v1/proxy/ws/attach?sessionId=...
|
||||
|
||||
# 3. 关闭
|
||||
curl -s -X POST http://127.0.0.1:8787/v1/proxy/ws/close \
|
||||
-H 'Content-Type: application/json' -d '{"sessionId":"..."}'
|
||||
```
|
||||
|
||||
attach 后第一条消息为控制帧 `{"type":"open"}`;此后浏览器与目标服务器双向透传。
|
||||
|
||||
## 安全边界
|
||||
|
||||
- 仅允许 `http/https`(代理)与 `ws/wss`(隧道)目标。
|
||||
- 拒绝云元数据地址(169.254.169.254 等)防 SSRF。
|
||||
- 单响应上限 10 MiB;隧道会话 10 分钟无活动自动回收。
|
||||
|
||||
## 部署建议
|
||||
|
||||
- 开发:`./run.sh web`(Vite :5173 反代 `/v1`、`/docs` 到 :8787)。
|
||||
- 生产:`npm run build:web` 产物交给任意静态服务器,`opsxapi-server` 独立部署;生产环境建议置于内网并按需增加鉴权反向代理。
|
||||
Reference in new issue
Block a user