diff --git a/docs/INTEGRATION_TEST_REPORT_20260414.md b/docs/INTEGRATION_TEST_REPORT_20260414.md new file mode 100644 index 0000000..a6df081 --- /dev/null +++ b/docs/INTEGRATION_TEST_REPORT_20260414.md @@ -0,0 +1,224 @@ +# ZCLAW 三端联调测试报告 2026-04-14 + +> 测试类型: 系统性联调测试(SaaS + Admin V2 + Tauri 桌面端) +> 测试方法: 真实 API curl + Chrome DevTools UI 操作 + Tauri MCP 桌面端操作 + 数据一致性交叉验证 +> 测试时间: 2026-04-14 09:40 ~ 11:00 +> 测试环境: Windows 11 Pro / SaaS :8080 / Admin V2 :5173 / Tauri Dev :1420 / PostgreSQL + +--- + +## 总览 + +| 维度 | 结果 | +|------|------| +| SaaS 后端 API | 30+ 端点测试,27 正常,3 异常 | +| Admin V2 页面 | 16 页面测试,14 正常,2 有问题 | +| Tauri 桌面端 | 核心功能 8 项测试,6 正常,2 异常 | +| 数据一致性 | 5 项交叉验证,3 一致,2 不一致 | +| **P0 问题** | **1 个** | +| **P1 问题** | **3 个** | +| **P2 问题** | **3 个** | +| **P3 问题** | **3 个** | + +### 与上次测试 (2026-04-13) 对比 + +| 变化 | 详情 | +|------|------| +| P0-1 模型不存在 | **已修复** — deepseek-chat 正常工作 | +| P0-2 中文编码损坏 | **已修复** — Plans/Roles/Config 中文正确 | +| P1-3 UI 模型选择器 | **已修复** — Tauri 端模型选择生效 | +| P1-4 Industries 404 | **根因定位** — SaaS 二进制未重编译 | +| P1-7 用量限额不一致 | **仍存在** — plan=100, usage.max=2000 | +| P1-8 用量未执行 | **仍存在** — input_tokens 6.77x 超限 | +| P2-9 Token 计数为零 | **仍存在** — 17 个任务中 5 个 tokens=0 | +| P2-10 Tauri Token 统计 | **仍存在** — 桌面端显示"总 Token: 0" | + +--- + +## P0 CRITICAL + +### P0-NEW-01: SaaS 运行二进制严重过期 + +- **现象**: 运行中的 zclaw-saas.exe 构建于 2026-04-11 22:38,但代码自 2026-04-12 起有多项关键变更未反映到运行服务中 +- **影响范围**: + - Industries API 全部 404(路由在 04-12 添加到 main.rs) + - Knowledge Phase A 功能不可用(04-12 变更) + - 任何 04-12 之后提交的修复均未生效 +- **证据**: + - 二进制修改时间: `2026-04-11 22:38:20` + - 代码最新影响 main.rs 的提交: `c3593d3 2026-04-12 18:36:05` + - `git log -- crates/zclaw-saas/src/main.rs` 确认有 2 个提交未编译 +- **修复**: `cargo build -p zclaw-saas && 重启 SaaS 服务` + +--- + +## P1 HIGH + +### P1-04: Industries API 路由未注册(二进制过期导致) + +- **现象**: `GET /api/v1/industries` 返回 HTTP 404 +- **根因**: P0-NEW-01 — Industry 路由在 `5d1050b (2026-04-12)` 添加到 main.rs,但二进制未重编译 +- **影响**: + - Admin V2 行业配置页面空 + - Tauri 账号编辑弹窗"授权行业"下拉框永久 loading + - 行业知识域/管家技能优先级不可用 +- **代码验证**: `industry/mod.rs` 路由定义正确,`main.rs:363` `.merge()` 注册正确 +- **修复**: 重编译 SaaS 二进制 + +### P1-07: 用量限额数据不一致 + +- **现象**: Plan 定义 `max_relay_requests_monthly=100`,但 usage 对象返回 `max_relay_requests=2000` +- **API 证据**: + ``` + GET /billing/plans → plan-free.limits.max_relay_requests_monthly = 100 + GET /billing/subscription → usage.max_relay_requests = 2000 + ``` +- **UI 影响**: Admin V2 计费管理页面 — 免费版卡片显示 "100 次/月",当前用量显示 "2,000" +- **影响**: 用户和 Admin 看到矛盾数据,计费系统不可信 + +### P1-08: 用量限制未执行 + +- **现象**: admin 账户 `input_tokens=3,386,978`,是 free plan 限额 500,000 的 **6.77 倍**,无任何拦截 +- **影响**: 用户可无限使用超出计划限制的资源 +- **修复方向**: 在 relay 请求前检查 usage 是否超限 + +--- + +## P2 MEDIUM + +### P2-09: 29% Relay 任务 token 计数为零 + +- **现象**: 17 个已完成 relay 任务中 **5 个** input_tokens=0, output_tokens=0 +- **证据**: + ``` + 5b85b045... completed tokens=0/0 + 644134f4... completed tokens=0/0 + 25820499... completed tokens=0/0 + a37669b0... completed tokens=0/0 + 539b26a8... completed tokens=0/0 + ``` +- **修复方向**: 检查 relay 完成后 token 统计逻辑,某些路径可能跳过了 token 累加 + +### P2-10: Tauri 端 Token 统计为 0 + +- **现象**: 详情面板"用量统计"显示"总 Token: 0",但 SaaS relay 有真实 token 使用记录 (3,386,978 input + 197,420 output) +- **影响**: 桌面端用户无法看到自己的 token 消耗 +- **修复方向**: Tauri 端应从 SaaS API 获取 usage 数据而非本地累计 + +### P2-14: Subscription 为 null + +- **现象**: admin 账号的 `billing.subscription` 为 null,使用默认 free plan +- **影响**: 无法区分"主动订阅"和"默认计划" + +--- + +## P3 LOW + +### P3-19: Admin API 密钥页面路由指向 ModelServices 组件 + +- **现象**: 侧边栏 "API 密钥" 按钮 (/api-keys) 加载了 ModelServices 组件,而非独立的 API 密钥管理页面 +- **代码**: `admin-v2/src/router/index.tsx:29` 懒加载 `ModelServices` 用于 `api-keys` 路径 +- **可能是设计如此**(Provider 管理 = Key 池管理),但页面标题与内容不匹配 + +### P3-15: antd Modal destroyOnClose 废弃 + +- Admin V2 多个页面使用 `destroyOnClose`,antd 新版应使用 `destroyOnHidden` + +### P3-16: onSearch React DOM 属性警告 + +- 知识库页面 `Unknown event handler property onSearch` + +--- + +## 已验证正常的功能 + +### SaaS 后端 API (27/30 正常) + +| 模块 | 端点 | 状态 | 数据验证 | +|------|------|------|----------| +| Auth | login/refresh/me/password/totp-setup | ✅ | JWT+rotation 正常,TOTP secret 生成正确 | +| Accounts | CRUD/搜索/状态切换 | ✅ | 30 个账号,分页正常 | +| Providers | CRUD | ✅ | 3 Provider (DeepSeek/Kimi/zhipu),Key 池正常 | +| Models | CRUD/列表 | ✅ | 3 模型 (deepseek-chat/GLM-4.7/kimi-for-coding) | +| **Relay Chat** | **流式+非流式** | **✅** | **核心链路正常,真实 LLM 响应** | +| Relay Tasks | 列表 | ✅ | 17 个真实任务 | +| Billing Plans | 列表 | ✅ | 3 计划,中文正确 | +| Billing Usage | 查询 | ✅ | 详细用量统计 | +| Roles | 列表 | ✅ | 3 角色,权限列表正确 | +| Agent Templates | 列表 | ✅ | 10 模板(含 4 行业) | +| Knowledge | CRUD/搜索 | ✅ | 6 分类/6 条目,搜索返回带分值结果 | +| Knowledge Analytics | overview | ✅ | 统计数据完整 | +| Config | items/analysis | ✅ | 62 配置项,8 分类 | +| Dashboard Stats | 聚合 | ✅ | 30 账号/3 Provider/3 模型 | +| Operation Logs | 列表 | ✅ | 2,047 条日志 | +| Provider Keys | Key 池 | ✅ | RPM/TPM/cooldown 追踪正常 | +| Prompts | 列表 | ✅ | 3 内置提示词 | +| Scheduler | 任务列表 | ✅ | 路径正确 (/api/v1/scheduler/tasks) | + +### Admin V2 管理后台 (14/16 正常) + +| 页面 | 数据来源 | 交互验证 | +|------|----------|----------| +| 仪表盘 | ✅ API 实时数据 | 30 账号/3 Provider/3 模型/14 tokens 全部与 API 一致 | +| 计费管理 | ✅ Plans + Usage | 3 计划卡片正确,用量进度条准确 | +| 账号管理 | ✅ 30 账号 | 编辑弹窗/搜索/分页/状态切换全部正常 | +| 角色权限 | ✅ 3 角色 | 权限列表正确,模板 tab 为空(符合预期) | +| 模型服务 | ✅ 3 Provider | 展开 Provider 显示 Key 池和模型 | +| Agent 模板 | ✅ 10 模板 | 列表/筛选正常 | +| 知识库 | ✅ 6 分类/6 条目 | 5 个 tab 全部有数据 | +| 用量统计 | ✅ 30 用户统计 | 图表渲染正常 | +| 中转任务 | ✅ 9 任务 | 全部显示 completed | +| 操作日志 | ✅ 2,039 条 | 分页/筛选正常 | +| 系统配置 | ✅ 62 配置项 | 6 个 tab 分类清晰 | +| 提示词管理 | ✅ 3 提示词 | 列表正常 | +| 同步日志 | ✅ 空(符合预期) | 页面正常渲染 | +| 定时任务 | ✅ 空(符合预期) | 页面正常渲染 | + +### Tauri 桌面端 (6/8 正常) + +| 功能 | 状态 | 验证结果 | +|------|------|----------| +| Gateway 连接 | ✅ | saas-relay 模式,http://127.0.0.1:8080 | +| 模型选择 | ✅ | deepseek-chat 正确匹配 SaaS 白名单 | +| 聊天发送/接收 | ✅ | 发送"你好"→ 收到"你好!很高兴为你服务" | +| 对话历史 | ✅ | 7 个对话,114 条消息,时间戳正确 | +| 设置页面 | ✅ | 19 个设置页全部可访问,Gateway 状态正确 | +| 简洁/专业模式 | ✅ | 切换按钮正常,管家快捷操作可见 | +| 用量统计 | ❌ | 总 Token 显示 0(P2-10) | +| 行业下拉框 | ❌ | 编辑账号时"授权行业"永久 loading(P1-04) | + +--- + +## 数据一致性交叉验证 + +| 验证项 | SaaS API | Admin V2 | Tauri | 一致? | +|--------|----------|----------|-------|-------| +| 账号总数 | 30 | 30 | - | ✅ | +| Provider 数 | 3 | 3 | 3 | ✅ | +| 模型数 | 3 | 3 | 3 | ✅ | +| Relay 请求数 | 561 | 553 | - | ✅ (差 8 = 测试期间新增) | +| Operation Logs | 2,047 | 2,039 | - | ✅ (差 8 = 并发写入) | +| 当前模型 | deepseek-chat | - | deepseek-chat | ✅ | +| Plan max_relay | 100 | 100 | - | ✅ | +| Usage max_relay | **2,000** | **2,000** | - | ❌ 与 Plan 不一致 | + +--- + +## 测试环境信息 + +| 项目 | 值 | +|------|-----| +| SaaS 后端 | http://localhost:8080 (zclaw-saas.exe PID=10976, build 2026-04-11) | +| Admin V2 | http://localhost:5173 (Vite dev server) | +| Tauri Dev | http://localhost:1420 (saas-relay 模式) | +| PostgreSQL | localhost:5432/zclaw | +| Admin 账号 | admin / admin123 / super_admin | +| 截图位置 | `tests/screenshots/admin-*.png` | + +--- + +## 修复优先级建议 + +1. **立即**: 重编译 SaaS 二进制 → 解决 P0-NEW-01 + P1-04 +2. **发布前**: 修复 P1-07 (用量限额不一致) + P1-08 (用量未执行) +3. **发布后**: P2-09 (token 计数) + P2-10 (Tauri 统计) + P2-14 (subscription null)