|
|
@@ -0,0 +1,935 @@
|
|
|
+# Ai-DOP 第三方系统模拟器分阶段完整执行任务书
|
|
|
+
|
|
|
+> 上游依据:
|
|
|
+> - [`Ai-DOP第三方对接模拟器建设方案.md`](./Ai-DOP第三方对接模拟器建设方案.md)
|
|
|
+> - [`Ai-DOP第三方对接模拟器初步执行任务书.md`](./Ai-DOP第三方对接模拟器初步执行任务书.md)
|
|
|
+> - [`Ai-DOP第三方系统集成指南.md`](./Ai-DOP第三方系统集成指南.md)
|
|
|
+>
|
|
|
+> 文档定位:第三方系统模拟器从当前初版到最终可交付状态的统一执行任务书。
|
|
|
+> 核查基线:`master` / `01ae6913d`,Web `2.4.416`,server `1.0.598`。
|
|
|
+> 编制日期:2026-10-09。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 0. 核心定位
|
|
|
+
|
|
|
+本工具的主要定位是:**模拟一个独立于 Ai-DOP 的第三方系统**,方便实施、开发和测试人员人工验证三种系统集成方式。
|
|
|
+
|
|
|
+| 集成方式 | 技术通道 | 模拟器扮演的角色 | Ai-DOP 扮演的角色 |
|
|
|
+|---|---|---|---|
|
|
|
+| 方式甲 | `DB_SYNC` | 第三方数据库服务器,提供表、数据、账号及异常环境 | 主动连接第三方数据库并同步 |
|
|
|
+| 方式乙 | `API_PULL` | 第三方查询 API 服务,接收并响应 Ai-DOP 请求 | 主动调用第三方 API 拉取 |
|
|
|
+| 方式丙 | `API_INBOUND` | 第三方接口客户端,签名后主动向 Ai-DOP 推数 | 接收、校验并处理第三方推送 |
|
|
|
+
|
|
|
+模拟器不是:
|
|
|
+
|
|
|
+- Ai-DOP 内部任务编排器;
|
|
|
+- 数据中台管理后台替代品;
|
|
|
+- 标准层、DWD、KPI、看板、S8 或 ChatBI 自动测试平台;
|
|
|
+- 契约治理、CI 或历史趋势平台;
|
|
|
+- 生产监控工具。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1. 建设目标
|
|
|
+
|
|
|
+### 1.1 基础连接与全链路人工测试
|
|
|
+
|
|
|
+测试人员通过模拟器准备第三方环境,然后在 Ai-DOP 中人工触发或查看结果,确认:
|
|
|
+
|
|
|
+```text
|
|
|
+第三方模拟端
|
|
|
+→ 网络/认证
|
|
|
+→ Ai-DOP 接口或执行器
|
|
|
+→ 同步/入站流水
|
|
|
+→ 贴源
|
|
|
+→ 标准层或目标业务结果
|
|
|
+```
|
|
|
+
|
|
|
+模拟器负责提供外部侧证据:
|
|
|
+
|
|
|
+- 方式甲的模拟源表、行数、增量值和连接状态;
|
|
|
+- 方式乙实际收到的请求、鉴权方式、cursor、响应和耗时;
|
|
|
+- 方式丙实际发出的请求、签名摘要、响应、回执和耗时;
|
|
|
+- 统一 `runId`、测试业务键和脱敏日志;
|
|
|
+- 对应的 Ai-DOP 人工操作步骤与核验 SQL/API。
|
|
|
+
|
|
|
+模拟器不直接读取或修改 Ai-DOP 内部业务表。全链路最终是否打通,由测试人员结合模拟器证据与 Ai-DOP 页面、日志或只读查询共同确认。
|
|
|
+
|
|
|
+### 1.2 正常与异常测试
|
|
|
+
|
|
|
+工具提供可选择的正常/异常预置条件,测试人员人工执行并观察 Ai-DOP 行为。工具不需要建设复杂自动编排。
|
|
|
+
|
|
|
+### 1.3 压力测试
|
|
|
+
|
|
|
+工具能够按安全上限生成负载或承受请求,测量三种方式在不同数据量、并发、QPS、批大小和持续时间下的表现。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. 明确不做
|
|
|
+
|
|
|
+- 不自动修改 Ai-DOP 来源、实体、授权或租户配置;
|
|
|
+- 不自动抢占 T8、165、自建单或真实第三方权威来源;
|
|
|
+- 不直接写 Ai-DOP 贴源、标准、DWD、KPI 表;
|
|
|
+- 不自动调度 Ai-DOP 内部任务作为默认测试方式;
|
|
|
+- 不建设跨对象 DAG;
|
|
|
+- 不建设 PR/每日/发布前 CI;
|
|
|
+- 不建设契约漂移、配置漂移和趋势治理平台;
|
|
|
+- 不建设复杂角色权限体系;
|
|
|
+- 不自动验证全部 KPI、看板、S8 与 ChatBI;
|
|
|
+- 不为 Ai-DOP 尚不存在的 API_INBOUND 契约伪造接口;
|
|
|
+- 不在共享环境默认执行高压力测试;
|
|
|
+- 不保存真实 Secret、密码、JWT 或连接串。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3. 阶段划分
|
|
|
+
|
|
|
+| 阶段 | 名称 | 目标 |
|
|
|
+|---|---|---|
|
|
|
+| 第一阶段 | 初版完善与基础打通 | 三种方式均可由人工完成一次正常全链路测试 |
|
|
|
+| 第二阶段 | 正常/异常测试能力 | 页面提供三种方式的常用正常与异常测试条件 |
|
|
|
+| 第三阶段 | 压力测试能力 | 提供受控负载、基础指标、停止与环境保护 |
|
|
|
+| 第四阶段 | 交付收口 | 文档、配置模板、报告导出和验收清单完善 |
|
|
|
+
|
|
|
+每阶段通过后再进入下一阶段。第一阶段未打通时不得直接做压力测试。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 4. 当前完成情况
|
|
|
+
|
|
|
+### 4.1 代码层
|
|
|
+
|
|
|
+已核查:
|
|
|
+
|
|
|
+- `tools/integration-simulator/` 初版已建立;
|
|
|
+- 目录登记 42 个对象;
|
|
|
+- 42 个对象支持方式甲和方式乙模拟;
|
|
|
+- 26 个对象登记现有方式丙代码契约;
|
|
|
+- 方式丙客户端已实现 schema、普通 POST、receipt、bulk、snapshot open、snapshot commit、digest;
|
|
|
+- 方式乙 Mock 已支持 NONE、Token、Basic、APIKey、cursor、延迟及 HTTP 错误;
|
|
|
+- 方式甲已支持 MySQL 建表、装载、重置、更新和统计;
|
|
|
+- 页面、脱敏、白名单和三组样例场景已建立。
|
|
|
+
|
|
|
+结论:**模拟端基础代码已具备,但三种方式的真实人工全链路验收尚未完成。**
|
|
|
+
|
|
|
+### 4.2 配置层
|
|
|
+
|
|
|
+模拟器可以生成 `SIM_MODE3_DB`、`SIM_MODE3_API`、`SIM_MODE3_INBOUND` 建议配置,但建议不代表运行环境已经登记。
|
|
|
+
|
|
|
+2026-10-09 核查时开发库连接超时,以下状态尚未取得:
|
|
|
+
|
|
|
+- 三个测试来源是否存在;
|
|
|
+- 方式甲/乙实体是否登记并启用;
|
|
|
+- 目标贴源表是否存在;
|
|
|
+- 26 个方式丙实体哪些已启用;
|
|
|
+- 测试 AccessKey 是否授权并绑定测试租户。
|
|
|
+
|
|
|
+结论:**配置未验收。**
|
|
|
+
|
|
|
+### 4.3 数据层
|
|
|
+
|
|
|
+当前仓库无第一阶段真实测试报告,无法证明:
|
|
|
+
|
|
|
+- Ai-DOP 已连接模拟数据库并完成同步;
|
|
|
+- Ai-DOP 已请求模拟 API 并写入目标;
|
|
|
+- 26 个方式丙契约完成真实 schema 预检;
|
|
|
+- 三种方式产生可对应的同步/入站流水和业务结果。
|
|
|
+
|
|
|
+结论:**数据未验收。**
|
|
|
+
|
|
|
+### 4.4 自动测试
|
|
|
+
|
|
|
+隔离环境实测:
|
|
|
+
|
|
|
+```text
|
|
|
+80 collected
|
|
|
+78 passed
|
|
|
+1 failed
|
|
|
+1 skipped
|
|
|
+```
|
|
|
+
|
|
|
+- 失败测试错误依赖“本机端口 1 必然拒绝连接”的假设,实际返回 503;
|
|
|
+- 真实 MySQL 用例因没有模拟库凭据而跳过。
|
|
|
+
|
|
|
+结论:**基础测试接近完成,真实依赖与人工全链路测试未完成。**
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+# 第一阶段:初版完善与基础打通
|
|
|
+
|
|
|
+## 5. 第一阶段完成标准
|
|
|
+
|
|
|
+每种方式至少选择一个金标对象,由测试人员完成:
|
|
|
+
|
|
|
+1. 在模拟器准备第三方环境;
|
|
|
+2. 在 Ai-DOP 页面或已有操作入口配置/触发;
|
|
|
+3. 回到模拟器查看第三方侧证据;
|
|
|
+4. 在 Ai-DOP 查看同步/入站流水;
|
|
|
+5. 人工核验贴源及一个目标业务结果;
|
|
|
+6. 保存脱敏测试报告。
|
|
|
+
|
|
|
+推荐金标对象:
|
|
|
+
|
|
|
+| 方式 | 对象 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| 甲 | `ITEM` | 适合首次、重复和增量同步 |
|
|
|
+| 乙 | `PURCHASE_ORDER` | 适合鉴权、路径、业务键和 cursor |
|
|
|
+| 丙 | `S5_INVENTORY_TXN` v2 | 适合签名、幂等、版本和回执 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 6. F1:修复基础测试
|
|
|
+
|
|
|
+### 任务
|
|
|
+
|
|
|
+1. 修复端口依赖测试:
|
|
|
+ - 使用 monkeypatch 模拟连接失败,或启动受控本地服务;
|
|
|
+ - 不再依赖固定端口的偶然状态。
|
|
|
+2. 分离:
|
|
|
+ - 无外部依赖单元测试;
|
|
|
+ - 真实 MySQL 测试;
|
|
|
+ - 真实 Ai-DOP 人工验收辅助检查。
|
|
|
+3. 有 MySQL 凭据时执行真实建表、装载、更新和统计测试。
|
|
|
+
|
|
|
+### 验收
|
|
|
+
|
|
|
+- 单元测试全绿;
|
|
|
+- 真实 MySQL 测试执行成功;
|
|
|
+- 测试日志不包含凭据。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 7. F2:方式甲基础打通
|
|
|
+
|
|
|
+### 模拟器职责
|
|
|
+
|
|
|
+- 创建独立 MySQL 模拟 schema;
|
|
|
+- 建立第三方源表;
|
|
|
+- 装载 `SIM-{runId}` 数据;
|
|
|
+- 展示表名、行数、业务键和最大增量值;
|
|
|
+- 生成供人工录入 Ai-DOP 的连接与实体配置清单;
|
|
|
+- 提供新增、更新、重置功能;
|
|
|
+- 提供脱敏的模拟端状态。
|
|
|
+
|
|
|
+### 人工操作
|
|
|
+
|
|
|
+1. 在模拟器建立并装载 `ITEM`;
|
|
|
+2. 在 Ai-DOP 登记 `SIM_MODE3_DB`;
|
|
|
+3. 配置实体、源表、业务键、增量列和目标表;
|
|
|
+4. 在 Ai-DOP 测连;
|
|
|
+5. 在 Ai-DOP 人工执行同步;
|
|
|
+6. 查看同步日志、游标、贴源和目标结果;
|
|
|
+7. 将结果填回测试报告。
|
|
|
+
|
|
|
+### 必测正常用例
|
|
|
+
|
|
|
+- 测连成功;
|
|
|
+- 首次全量;
|
|
|
+- 原样重复;
|
|
|
+- 新增数据后增量同步;
|
|
|
+- 更新数据并推进增量列;
|
|
|
+- 多行数据;
|
|
|
+- 中文、null、日期和 decimal。
|
|
|
+
|
|
|
+### 验收
|
|
|
+
|
|
|
+- Ai-DOP 确实从模拟数据库读取;
|
|
|
+- 模拟端数据量与 Ai-DOP 拉取结果可核对;
|
|
|
+- 重复同步不产生重复业务行;
|
|
|
+- 增量游标符合预期;
|
|
|
+- 一个目标业务结果可查。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 8. F3:方式乙基础打通
|
|
|
+
|
|
|
+### 模拟器职责
|
|
|
+
|
|
|
+- 启停第三方 Mock API;
|
|
|
+- 挂载 canonical 样例;
|
|
|
+- 提供 GET endpoint;
|
|
|
+- 支持 `data.list`;
|
|
|
+- 支持稳定 bizKey 和 cursor;
|
|
|
+- 记录 Ai-DOP 实际请求的时间、path、query、鉴权类型、响应状态和耗时;
|
|
|
+- 日志自动脱敏。
|
|
|
+
|
|
|
+### 人工操作
|
|
|
+
|
|
|
+1. 在模拟器启动 Mock 并挂载 `PURCHASE_ORDER`;
|
|
|
+2. 在 Ai-DOP 登记 `SIM_MODE3_API`;
|
|
|
+3. 配置 base URL、鉴权、API path、response path、dedup key 和 cursor;
|
|
|
+4. 在 Ai-DOP 测连;
|
|
|
+5. 在 Ai-DOP 人工执行拉取;
|
|
|
+6. 在模拟器查看实际请求;
|
|
|
+7. 在 Ai-DOP 查看同步日志、贴源和目标结果。
|
|
|
+
|
|
|
+### 必测正常用例
|
|
|
+
|
|
|
+- NONE;
|
|
|
+- Bearer/Token;
|
|
|
+- Basic;
|
|
|
+- APIKey;
|
|
|
+- 正常数据;
|
|
|
+- 空数组;
|
|
|
+- 首次与增量 cursor;
|
|
|
+- 重复 bizKey。
|
|
|
+
|
|
|
+### 验收
|
|
|
+
|
|
|
+- 模拟器收到来自 Ai-DOP 的真实请求;
|
|
|
+- 鉴权和 cursor 符合配置;
|
|
|
+- Mock 返回行数与 Ai-DOP 拉取结果可核对;
|
|
|
+- 重复业务键处理符合预期;
|
|
|
+- 一个目标业务结果可查。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 9. F4:方式丙基础打通
|
|
|
+
|
|
|
+### 模拟器职责
|
|
|
+
|
|
|
+- 从环境变量读取 AccessKey 与 Secret;
|
|
|
+- 生成 timestamp、nonce、body SHA256、幂等键和 HMAC;
|
|
|
+- 支持契约版本头;
|
|
|
+- 调用 Ai-DOP schema、POST、receipt、bulk、snapshot 和 digest;
|
|
|
+- 展示脱敏请求摘要、响应、耗时和批次号;
|
|
|
+- 不向浏览器返回 Secret。
|
|
|
+
|
|
|
+### 人工操作
|
|
|
+
|
|
|
+1. 在 Ai-DOP 准备测试开放身份、租户、grant 和 entity;
|
|
|
+2. 在模拟器加载测试凭据;
|
|
|
+3. 对 26 个 entityCode 执行 schema 预检;
|
|
|
+4. 对 READY 的金标实体执行普通 POST;
|
|
|
+5. 查询 receipt;
|
|
|
+6. 在 Ai-DOP 查看入站流水、贴源和目标结果。
|
|
|
+
|
|
|
+### 必测正常用例
|
|
|
+
|
|
|
+- schema;
|
|
|
+- 普通 POST;
|
|
|
+- receipt;
|
|
|
+- bulk;
|
|
|
+- snapshot open;
|
|
|
+- snapshot commit;
|
|
|
+- digest。
|
|
|
+
|
|
|
+### 验收
|
|
|
+
|
|
|
+- 26 个契约均有真实预检结果;
|
|
|
+- 未开通与代码不支持分开显示;
|
|
|
+- READY 金标实体推送成功;
|
|
|
+- 入站响应、回执和 Ai-DOP 流水可核对;
|
|
|
+- 一个目标业务结果可查。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 10. F5:人工全链路报告
|
|
|
+
|
|
|
+报告按方式生成,至少包含:
|
|
|
+
|
|
|
+- runId;
|
|
|
+- 环境与测试租户;
|
|
|
+- 对象;
|
|
|
+- 模拟端准备结果;
|
|
|
+- 人工执行步骤;
|
|
|
+- 模拟端证据;
|
|
|
+- Ai-DOP 测连结果;
|
|
|
+- 同步/入站流水编号;
|
|
|
+- 贴源核验结果;
|
|
|
+- 目标业务结果;
|
|
|
+- 结论;
|
|
|
+- 未完成项;
|
|
|
+- 清理提示。
|
|
|
+
|
|
|
+工具只保存测试人员填写的摘要,不保存数据库密码、Secret、JWT、连接串或完整敏感 payload。
|
|
|
+
|
|
|
+### 第一阶段验收表
|
|
|
+
|
|
|
+- [ ] 单元测试全绿
|
|
|
+- [ ] 真实 MySQL 测试通过
|
|
|
+- [ ] 方式甲正常全链路打通
|
|
|
+- [ ] 方式乙正常全链路打通
|
|
|
+- [ ] 方式丙正常全链路打通
|
|
|
+- [ ] 三种方式均有模拟端证据
|
|
|
+- [ ] 三种方式均有 Ai-DOP 流水证据
|
|
|
+- [ ] 三种方式均人工核验一个目标业务结果
|
|
|
+- [ ] 报告已脱敏
|
|
|
+- [ ] 未修改生产权威来源
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+# 第二阶段:正常与异常测试能力
|
|
|
+
|
|
|
+## 11. 第二阶段原则
|
|
|
+
|
|
|
+- 以人工操作方便为目标;
|
|
|
+- 页面提供预置测试条件和清晰说明;
|
|
|
+- 测试人员决定何时在 Ai-DOP 触发;
|
|
|
+- 模拟器只控制第三方一侧;
|
|
|
+- 每个异常场景提供恢复按钮或恢复步骤;
|
|
|
+- 不建设复杂自动编排。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 12. N1:方式甲异常测试
|
|
|
+
|
|
|
+模拟器提供或指导:
|
|
|
+
|
|
|
+| 场景 | 模拟方法 | 预期观察 |
|
|
|
+|---|---|---|
|
|
|
+| 地址/端口错误 | 使用未监听端口 | Ai-DOP 测连或同步失败 |
|
|
|
+| 用户名/密码错误 | 使用错误测试凭据 | 认证失败 |
|
|
|
+| 无表权限 | 使用受限测试账号 | 查询被拒绝 |
|
|
|
+| 源表不存在 | 配置不存在表名 | 明确报表不存在 |
|
|
|
+| 字段不存在 | 配置错误增量列 | 明确报列不存在 |
|
|
|
+| 空业务键 | 装载空键数据 | 被拒绝或隔离,不静默覆盖 |
|
|
|
+| 重复业务键 | 装载重复键 | 行为可解释 |
|
|
|
+| 增量列不推进 | 更新数据不更新时间 | 不应误判为新增量 |
|
|
|
+| 慢查询 | 使用受控延迟视图或大数据量 | 超时行为可解释 |
|
|
|
+| 连接中断 | 测试期间停止模拟库 | 失败不记成功,可恢复 |
|
|
|
+
|
|
|
+不得为了制造异常修改 Ai-DOP 主库。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 13. N2:方式乙异常测试
|
|
|
+
|
|
|
+页面提供:
|
|
|
+
|
|
|
+- 401;
|
|
|
+- 403;
|
|
|
+- 404;
|
|
|
+- 429;
|
|
|
+- 500;
|
|
|
+- 503;
|
|
|
+- 固定延迟;
|
|
|
+- 超时;
|
|
|
+- 空响应;
|
|
|
+- 非法 JSON;
|
|
|
+- 错误 Content-Type;
|
|
|
+- 错误 response path;
|
|
|
+- 缺 bizKey;
|
|
|
+- 重复 bizKey;
|
|
|
+- cursor 不推进;
|
|
|
+- cursor 乱序。
|
|
|
+
|
|
|
+模拟器展示:
|
|
|
+
|
|
|
+- 实际请求;
|
|
|
+- 选择的异常;
|
|
|
+- 返回状态;
|
|
|
+- 响应耗时;
|
|
|
+- 恢复默认按钮。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 14. N3:方式丙异常测试
|
|
|
+
|
|
|
+页面提供:
|
|
|
+
|
|
|
+- 缺 AccessKey;
|
|
|
+- 错误 AccessKey;
|
|
|
+- 错误 Secret/签名;
|
|
|
+- body 摘要不一致;
|
|
|
+- 缺幂等键;
|
|
|
+- 过期 timestamp;
|
|
|
+- nonce replay;
|
|
|
+- 同幂等键同 body;
|
|
|
+- 同幂等键不同 body;
|
|
|
+- 缺必填字段;
|
|
|
+- 字段类型错误;
|
|
|
+- 部分行拒绝;
|
|
|
+- stale 数据;
|
|
|
+- 未授权 entityCode;
|
|
|
+- 未启用 entity;
|
|
|
+- bulk 部分失败;
|
|
|
+- snapshot commit 失败。
|
|
|
+
|
|
|
+每个场景显示预期 HTTP 状态或预期分类。被 Ai-DOP 正确拒绝属于测试通过,不属于工具失败。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 15. N4:异常测试报告
|
|
|
+
|
|
|
+测试人员可选择场景、填写 Ai-DOP 观察结果并导出:
|
|
|
+
|
|
|
+```text
|
|
|
+场景
|
|
|
+模拟端行为
|
|
|
+预期结果
|
|
|
+实际响应
|
|
|
+Ai-DOP 流水状态
|
|
|
+目标数据是否变化
|
|
|
+是否符合预期
|
|
|
+备注
|
|
|
+```
|
|
|
+
|
|
|
+### 第二阶段验收表
|
|
|
+
|
|
|
+- [ ] 三种方式均有正常预置
|
|
|
+- [ ] 三种方式均有常见异常预置
|
|
|
+- [ ] 异常可一键或按说明恢复
|
|
|
+- [ ] 正确拒绝与工具失败区分
|
|
|
+- [ ] 模拟端证据可查看
|
|
|
+- [ ] 人工结果可填写并导出
|
|
|
+- [ ] 异常测试不污染生产数据
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+# 第三阶段:压力测试能力
|
|
|
+
|
|
|
+## 16. 压力测试边界
|
|
|
+
|
|
|
+压力测试必须由测试人员显式开启。默认不开启,不允许对生产运行。
|
|
|
+
|
|
|
+执行前必须填写:
|
|
|
+
|
|
|
+- 环境;
|
|
|
+- 测试租户;
|
|
|
+- 负责人;
|
|
|
+- 时间窗口;
|
|
|
+- 最大数据量;
|
|
|
+- 最大并发;
|
|
|
+- 最大 QPS;
|
|
|
+- 最大持续时间;
|
|
|
+- 停止阈值;
|
|
|
+- 清理方案。
|
|
|
+
|
|
|
+共享开发/UAT 环境须由负责人确认后执行。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 17. 通用压力参数与指标
|
|
|
+
|
|
|
+### 参数
|
|
|
+
|
|
|
+- 数据量;
|
|
|
+- 并发数;
|
|
|
+- 目标 QPS;
|
|
|
+- 持续时间;
|
|
|
+- 预热时间;
|
|
|
+- 批大小;
|
|
|
+- 请求间隔;
|
|
|
+- 超时;
|
|
|
+- 最大重试;
|
|
|
+- 固定或随机样例;
|
|
|
+- runId。
|
|
|
+
|
|
|
+### 指标
|
|
|
+
|
|
|
+- 总请求/总批次;
|
|
|
+- 总数据行;
|
|
|
+- 成功数;
|
|
|
+- 失败数;
|
|
|
+- 成功率;
|
|
|
+- 实际 QPS;
|
|
|
+- 行吞吐;
|
|
|
+- 平均耗时;
|
|
|
+- P50;
|
|
|
+- P95;
|
|
|
+- P99;
|
|
|
+- 最大耗时;
|
|
|
+- HTTP/错误分类;
|
|
|
+- 超时数;
|
|
|
+- 限流数;
|
|
|
+- 首次失败时间;
|
|
|
+- 测试开始与结束时间。
|
|
|
+
|
|
|
+模拟器只保证采集第三方侧可观察指标。Ai-DOP CPU、内存、队列和数据库资源由测试人员在现有监控工具中观察。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 18. P1:方式甲压力测试
|
|
|
+
|
|
|
+方式甲中,模拟器主要负责准备不同规模的第三方数据库数据,由测试人员在 Ai-DOP 发起同步。
|
|
|
+
|
|
|
+### 数据规模档位
|
|
|
+
|
|
|
+建议默认:
|
|
|
+
|
|
|
+- S:100 行;
|
|
|
+- M:10,000 行;
|
|
|
+- L:100,000 行;
|
|
|
+- XL:须审批后自定义。
|
|
|
+
|
|
|
+不得把档位写死为环境容量承诺。
|
|
|
+
|
|
|
+### 测试类型
|
|
|
+
|
|
|
+- 首次全量;
|
|
|
+- 大批量分页;
|
|
|
+- 小增量;
|
|
|
+- 大增量;
|
|
|
+- 更新已有行;
|
|
|
+- 多实体并行同步;
|
|
|
+- 慢查询;
|
|
|
+- 连接池压力;
|
|
|
+- 同步中断与恢复。
|
|
|
+
|
|
|
+### 模拟器功能
|
|
|
+
|
|
|
+- 批量生成数据;
|
|
|
+- 显示生成耗时和行数;
|
|
|
+- 控制增量比例;
|
|
|
+- 控制字段宽度;
|
|
|
+- 查看数据库侧当前连接和基础统计;
|
|
|
+- 一键停止后续数据生成;
|
|
|
+- 生成 Ai-DOP 人工执行和观察清单。
|
|
|
+
|
|
|
+### 验收
|
|
|
+
|
|
|
+- 各档位模拟数据可稳定生成;
|
|
|
+- Ai-DOP 拉取行数与源端可核对;
|
|
|
+- 分页无丢行、无重复;
|
|
|
+- 中断后状态可解释;
|
|
|
+- 压力报告记录源端规模和 Ai-DOP 人工观察结果。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 19. P2:方式乙压力测试
|
|
|
+
|
|
|
+方式乙中,模拟器是被压测的第三方 API 服务,Ai-DOP 是请求发起方。
|
|
|
+
|
|
|
+### 测试类型
|
|
|
+
|
|
|
+- 单次大响应;
|
|
|
+- 多批 cursor 拉取;
|
|
|
+- 多实体并行请求;
|
|
|
+- 固定延迟;
|
|
|
+- 随机延迟;
|
|
|
+- 间歇 429;
|
|
|
+- 间歇 500/503;
|
|
|
+- 超时边界;
|
|
|
+- 长时间稳定性。
|
|
|
+
|
|
|
+### 模拟器功能
|
|
|
+
|
|
|
+- 配置每次返回行数;
|
|
|
+- 配置响应数据总量;
|
|
|
+- 配置固定/随机延迟;
|
|
|
+- 配置错误比例;
|
|
|
+- 配置限流阈值;
|
|
|
+- 统计收到的请求量、并发、QPS、耗时和错误;
|
|
|
+- 实时停止 Mock 压力模式;
|
|
|
+- 恢复正常模式。
|
|
|
+
|
|
|
+### 验收
|
|
|
+
|
|
|
+- 模拟器能承受预定 Ai-DOP 请求量;
|
|
|
+- 请求统计与 Ai-DOP 同步批次可对应;
|
|
|
+- cursor 无丢失和重复;
|
|
|
+- 429/5xx/超时行为符合预期;
|
|
|
+- 恢复正常模式后可再次拉取。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 20. P3:方式丙压力测试
|
|
|
+
|
|
|
+方式丙中,模拟器是负载发起方。
|
|
|
+
|
|
|
+### 测试类型
|
|
|
+
|
|
|
+- 单条 POST;
|
|
|
+- 多并发单条 POST;
|
|
|
+- 多行普通 POST;
|
|
|
+- bulk;
|
|
|
+- 不同 entityCode 混合;
|
|
|
+- 固定 QPS;
|
|
|
+- 阶梯升压;
|
|
|
+- 固定并发;
|
|
|
+- 固定持续时间;
|
|
|
+- 幂等重复;
|
|
|
+- 部分错误数据;
|
|
|
+- 429 与恢复。
|
|
|
+
|
|
|
+### 模拟器功能
|
|
|
+
|
|
|
+- 并发 worker;
|
|
|
+- QPS 限制;
|
|
|
+- 批大小;
|
|
|
+- 持续时间;
|
|
|
+- 阶梯配置;
|
|
|
+- 错误数据比例;
|
|
|
+- 实时指标;
|
|
|
+- 立即停止;
|
|
|
+- 停止后等待在途请求;
|
|
|
+- 报告导出。
|
|
|
+
|
|
|
+### 安全限制
|
|
|
+
|
|
|
+- 默认最大并发和 QPS 使用保守值;
|
|
|
+- 提高上限需显式二次确认;
|
|
|
+- 达到连续错误、超时或 429 阈值自动停止;
|
|
|
+- 不自动无限重试;
|
|
|
+- 每轮使用唯一 runId;
|
|
|
+- 请求体不得携带任意 tenantId 改变目标租户。
|
|
|
+
|
|
|
+### 验收
|
|
|
+
|
|
|
+- 实际 QPS 接近目标且偏差可解释;
|
|
|
+- 成功、失败、限流和超时统计准确;
|
|
|
+- P50/P95/P99 可计算;
|
|
|
+- 达到停止阈值自动结束;
|
|
|
+- Ai-DOP 入站流水与发送数量可人工核对;
|
|
|
+- 测试结束后无持续后台请求。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 21. 压力控制台
|
|
|
+
|
|
|
+页面只需提供:
|
|
|
+
|
|
|
+- 方式选择;
|
|
|
+- 对象选择;
|
|
|
+- 参数输入;
|
|
|
+- 环境与安全确认;
|
|
|
+- 开始;
|
|
|
+- 停止;
|
|
|
+- 实时基础指标;
|
|
|
+- 错误摘要;
|
|
|
+- 报告导出。
|
|
|
+
|
|
|
+不要求:
|
|
|
+
|
|
|
+- 复杂监控大屏;
|
|
|
+- 分布式压测集群;
|
|
|
+- 自动扩缩容;
|
|
|
+- 长期趋势平台;
|
|
|
+- 生产告警系统。
|
|
|
+
|
|
|
+### 第三阶段验收表
|
|
|
+
|
|
|
+- [ ] 压力测试默认关闭
|
|
|
+- [ ] 非测试环境被阻断
|
|
|
+- [ ] 三种方式均有压力测试方案
|
|
|
+- [ ] 参数有安全上限
|
|
|
+- [ ] 可立即停止
|
|
|
+- [ ] 达到阈值可自动停止
|
|
|
+- [ ] 指标计算正确
|
|
|
+- [ ] 三种方式均可导出报告
|
|
|
+- [ ] Ai-DOP 资源由人工监控并填写
|
|
|
+- [ ] 测试结束后无残留负载
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+# 第四阶段:交付收口
|
|
|
+
|
|
|
+## 22. 启动与配置
|
|
|
+
|
|
|
+交付:
|
|
|
+
|
|
|
+- Python 环境要求;
|
|
|
+- 安装命令;
|
|
|
+- `config.example.json`;
|
|
|
+- 环境变量说明;
|
|
|
+- MySQL 模拟库初始化;
|
|
|
+- Mock API 启停;
|
|
|
+- 方式丙凭据加载;
|
|
|
+- 端口说明;
|
|
|
+- host 白名单说明;
|
|
|
+- 常见故障排查。
|
|
|
+
|
|
|
+Docker 可作为可选交付,不作为完成本工具的硬前置。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 23. 人工操作手册
|
|
|
+
|
|
|
+按方式分别说明:
|
|
|
+
|
|
|
+1. 模拟器准备;
|
|
|
+2. Ai-DOP 配置;
|
|
|
+3. Ai-DOP 人工触发;
|
|
|
+4. 模拟器证据查看;
|
|
|
+5. Ai-DOP 流水查看;
|
|
|
+6. 目标结果核验;
|
|
|
+7. 异常恢复;
|
|
|
+8. 测试数据清理。
|
|
|
+
|
|
|
+操作手册中的截图和字段必须与实际页面一致。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 24. 报告与脱敏
|
|
|
+
|
|
|
+支持导出:
|
|
|
+
|
|
|
+- 基础打通报告;
|
|
|
+- 正常/异常报告;
|
|
|
+- 压力测试报告。
|
|
|
+
|
|
|
+报告不得包含:
|
|
|
+
|
|
|
+- AccessSecret;
|
|
|
+- 数据库密码;
|
|
|
+- JWT;
|
|
|
+- 完整 Authorization;
|
|
|
+- 完整连接串;
|
|
|
+- 真实客户敏感数据。
|
|
|
+
|
|
|
+AccessKey 仅保留后四位。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 25. 最终交付验收
|
|
|
+
|
|
|
+### 方式甲
|
|
|
+
|
|
|
+- [ ] 可建立和装载模拟数据库
|
|
|
+- [ ] 可完成正常全链路人工测试
|
|
|
+- [ ] 可完成常见异常测试
|
|
|
+- [ ] 可生成多档数据用于压力测试
|
|
|
+- [ ] 可核对源端行数与增量值
|
|
|
+
|
|
|
+### 方式乙
|
|
|
+
|
|
|
+- [ ] 可启动第三方 Mock API
|
|
|
+- [ ] 可完成正常全链路人工测试
|
|
|
+- [ ] 可切换鉴权、延迟和错误
|
|
|
+- [ ] 可承受并统计 Ai-DOP 拉取压力
|
|
|
+- [ ] 请求日志已脱敏
|
|
|
+
|
|
|
+### 方式丙
|
|
|
+
|
|
|
+- [ ] 可完成 26 契约预检
|
|
|
+- [ ] 可完成七类操作
|
|
|
+- [ ] 可完成正常与异常推送测试
|
|
|
+- [ ] 可配置并发、QPS、批大小和持续时间
|
|
|
+- [ ] 可实时停止并导出压力报告
|
|
|
+
|
|
|
+### 通用
|
|
|
+
|
|
|
+- [ ] 工具只模拟第三方一侧
|
|
|
+- [ ] 不直接写 Ai-DOP 业务表
|
|
|
+- [ ] 不自动修改生产配置
|
|
|
+- [ ] 人工全链路步骤清晰
|
|
|
+- [ ] 测试数据有 runId
|
|
|
+- [ ] 凭据不落盘
|
|
|
+- [ ] 报告已脱敏
|
|
|
+- [ ] 无后台残留负载
|
|
|
+
|
|
|
+全部通过后,工具状态可标记为:
|
|
|
+
|
|
|
+```text
|
|
|
+第三方系统模拟器:三种集成方式基础、异常与压力测试能力交付完成
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 26. 建议改动文件
|
|
|
+
|
|
|
+### 第一阶段
|
|
|
+
|
|
|
+```text
|
|
|
+tools/integration-simulator/app.py
|
|
|
+tools/integration-simulator/static/index.html
|
|
|
+tools/integration-simulator/static/app.js
|
|
|
+tools/integration-simulator/static/app.css
|
|
|
+tools/integration-simulator/tests/test_inbound_signature.py
|
|
|
+tools/integration-simulator/tests/test_mock_db.py
|
|
|
+tools/integration-simulator/README.md
|
|
|
+```
|
|
|
+
|
|
|
+### 第二阶段
|
|
|
+
|
|
|
+```text
|
|
|
+tools/integration-simulator/providers/mock_api.py
|
|
|
+tools/integration-simulator/clients/inbound_client.py
|
|
|
+tools/integration-simulator/providers/mock_db.py
|
|
|
+tools/integration-simulator/catalog/scenarios.json
|
|
|
+tools/integration-simulator/tests/test_abnormal_cases.py
|
|
|
+```
|
|
|
+
|
|
|
+### 第三阶段
|
|
|
+
|
|
|
+```text
|
|
|
+tools/integration-simulator/load/
|
|
|
+tools/integration-simulator/tests/test_load_controls.py
|
|
|
+tools/integration-simulator/tests/test_load_metrics.py
|
|
|
+```
|
|
|
+
|
|
|
+是否拆分模块以实际代码复杂度为准,不为目录整齐进行无必要重构。
|
|
|
+
|
|
|
+默认不修改 `Web/` 和 `server/`。若实证发现 Ai-DOP 阻断缺陷,应另立修复任务并确认,不能混入模拟器代码。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 27. 跨模块影响
|
|
|
+
|
|
|
+### 数据中台
|
|
|
+
|
|
|
+人工测试会使用数据源、实体、同步任务、同步日志和入站流水页面。
|
|
|
+结论:**需人工操作和观察,无需模拟器修改数据中台代码。**
|
|
|
+
|
|
|
+### S1~S7、S8、ChatBI
|
|
|
+
|
|
|
+全链路测试可能选择一个目标业务结果进行人工核验。
|
|
|
+结论:**只读核验,无需模拟器自动测试或修改这些模块。**
|
|
|
+
|
|
|
+### 部署与共享环境
|
|
|
+
|
|
|
+压力测试会占用同步任务、接口、数据库和队列资源。
|
|
|
+结论:**需负责人确认时间窗口和上限;默认禁止生产。**
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 28. 反向影响推演
|
|
|
+
|
|
|
+### 28.1 代码调用面
|
|
|
+
|
|
|
+已核查:
|
|
|
+
|
|
|
+- 方式甲由 Ai-DOP 主动连接模拟数据库;
|
|
|
+- 方式乙由 Ai-DOP 主动请求模拟 API;
|
|
|
+- 方式丙由模拟器主动请求 Ai-DOP 入站 API。
|
|
|
+
|
|
|
+结论:**模拟器只控制第三方一侧;无需建立 Ai-DOP 内部调用旁路。**
|
|
|
+
|
|
|
+### 28.2 数据契约面
|
|
|
+
|
|
|
+已核查:42 个对象目录和 26 个推数契约用于生成第三方样例。
|
|
|
+
|
|
|
+结论:**需维护样例与契约一致性;目标业务结果只人工核验。**
|
|
|
+
|
|
|
+### 28.3 多数据源面
|
|
|
+
|
|
|
+已核查:测试来源可能与 T8、165、自建单或真实第三方共存。
|
|
|
+
|
|
|
+结论:**需使用 `SIM_MODE3_*` 专用来源,不得成为生产权威来源。**
|
|
|
+
|
|
|
+### 28.4 多租户 / Domain 面
|
|
|
+
|
|
|
+已核查:方式丙租户由开放身份决定,方式甲/乙由 Ai-DOP 配置决定。
|
|
|
+
|
|
|
+结论:**只允许测试租户;模拟器 payload 不得任意切换 tenantId。**
|
|
|
+
|
|
|
+### 28.5 运行面
|
|
|
+
|
|
|
+已核查:压力测试可能影响共享环境。
|
|
|
+
|
|
|
+结论:**需安全上限、人工确认、立即停止、自动停止和无残留负载检查。**
|
|
|
+
|
|
|
+### 28.6 验证面
|
|
|
+
|
|
|
+已核查:工具的价值是方便人工测试,不是替代所有内部自动化。
|
|
|
+
|
|
|
+结论:**保留必要单元测试;业务链路采用模拟端证据 + Ai-DOP 人工证据。**
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 29. 版本与提交规则
|
|
|
+
|
|
|
+- 仅修改 `tools/` 与文档,且不进入 Web/server 构建:不升前后端版本;
|
|
|
+- 修改 Web:Web patch +1;
|
|
|
+- 修改 server:server 三处版本 patch +1;
|
|
|
+- 不提交 `config.json`、`.env`、运行日志、真实报告、凭据和 Word 锁文件;
|
|
|
+- 用户说“提交”时执行 commit + push。
|
|
|
+
|
|
|
+建议按阶段提交:
|
|
|
+
|
|
|
+1. `fix(simulator): 完成三种方式基础人工联调`
|
|
|
+2. `feat(simulator): 增加三种方式正常与异常测试`
|
|
|
+3. `feat(simulator): 增加受控压力测试能力`
|
|
|
+4. `docs(simulator): 完善第三方模拟器交付手册`
|