# YG_FT 平台测试用例 ## 测试范围 覆盖部署、登录会话、权限、租户与项目隔离、算力节点、GPU 分配、数据集、MinIO、训练、权重合并、模型推理、模型评测、审计、日志、异常重试和性能。 测试地址:前端 `http://localhost:16801`,Backend `http://localhost:17861/modelTF`,Compute `http://localhost:19100/modelTF`,File Gateway `http://localhost:19101/modelTF`,MinIO `http://localhost:19000`。 ## 前置条件 1. 前端已执行 `npm run build`。 2. Backend、Frontend、Redis、MinIO、Compute 容器均为 healthy。 3. PostgreSQL 表结构与 `backend/app/db/sql/000_full_init.sql` 一致。 4. 准备管理员、普通用户、不同项目和租户测试账号。 5. 准备 JSON、JSONL、空文件和非法格式数据集。 6. 准备 base model、adapter 和可推理模型。 ## 用例 | 编号 | 场景 | 操作 | 预期 | | --- | --- | --- | --- | | DEP-001 | 容器启动 | 执行各 compose 的 `up -d` | 所有服务启动并 healthy | | DEP-002 | Backend 健康 | 访问 `/health` | HTTP 200,依赖状态正常 | | DEP-003 | Compute 健康 | 访问 Compute health | 返回节点服务正常 | | DEP-004 | MinIO 健康 | 访问 `/minio/health/live` | 返回存活状态 | | DEP-005 | 前端入口 | 打开 `:16801` | 无白屏、无外部 CDN 请求 | | DEP-006 | 跨服务器 | 配置远程 MinIO/Compute 地址 | Backend 可访问远程服务 | | AUTH-001 | 正常登录 | 输入正确账号密码 | 登录成功并保存 token | | AUTH-002 | 错误密码 | 连续输入错误密码 | 返回 401,达到阈值后限流 | | AUTH-003 | 过期会话 | 使用过期 token 请求接口 | 返回 401 并回登录页 | | AUTH-004 | 退出登录 | 退出后再次请求业务接口 | token 失效 | | AUTH-005 | 管理员 | 访问用户、节点、审计功能 | 可执行授权操作 | | AUTH-006 | 普通用户 | 访问管理员功能 | 按钮隐藏,后端返回 403 | | AUTH-007 | 项目隔离 | 用户 A 访问用户 B 项目 | 列表不显示,接口拒绝 | | AUTH-008 | 租户隔离 | 租户 A 请求租户 B 数据 | 不返回跨租户数据 | | AUTH-009 | ACL | 授予模型 read/execute | read 只能看,execute 才能运行 | | AUTH-010 | 软删除 | 删除模型或数据集 | 列表隐藏,保留删除审计字段 | | NODE-001 | 新增节点 | 填写 API、文件网关和标签 | 节点保存并显示 | | NODE-002 | 节点测试 | 点击测试 | health/GPU 信息同步 | | NODE-003 | 不可达节点 | 使用错误地址测试 | 快速失败并显示原因 | | NODE-004 | 删除节点 | 点击删除 | 节点从可用列表消失 | | NODE-005 | 多 GPU | 节点有多张卡 | 显示编号、显存和状态 | | NODE-006 | 指定 GPU | 训练选择 GPU 0 | 只占用 GPU 0 | | NODE-007 | GPU 冲突 | 两任务申请同卡 | 后者排队或拒绝,不抢占 | | NODE-008 | 剩余 GPU | 节点有空闲卡 | 其他任务可继续选择该节点 | | NODE-009 | 释放 GPU | 停止训练/卸载推理 | GPU 恢复可用 | | DATA-001 | JSON 统计 | 上传 3 条 JSON 数据 | 列表和详情均为 3 条 | | DATA-002 | JSONL 统计 | 上传 3 行 JSONL | 列表和详情均为 3 条 | | DATA-003 | 非法文件 | 上传空或错误格式 | 返回明确错误 | | DATA-004 | MinIO 归档 | 上传数据集 | 产生对象和 checksum | | DATA-005 | 节点同步 | 选择算力节点上传 | 文件进入目标节点缓存 | | DATA-006 | 同步断网 | 同步时阻断节点 | 进入重试或失败,不无限等待 | | DATA-007 | 数据权限 | 用户查看数据集 | 只显示有权限的数据 | | TRAIN-001 | 创建训练 | 选择项目、数据集、节点和 GPU | 任务关联完整 | | TRAIN-002 | 启动训练 | 启动任务 | 进入 queued/running | | TRAIN-003 | 日志轮询 | 打开训练日志 | 约 3 秒更新,不刷屏 | | TRAIN-004 | 训练曲线 | 产生 loss/metric | 页面显示曲线 | | TRAIN-005 | 停止训练 | 点击停止 | 进程停止且资源释放 | | TRAIN-006 | 训练失败 | 模拟引擎失败 | 显示原因和日志 | | MERGE-001 | 自动准备 | 执行权重合并 | 自动准备 base model/adapter | | MERGE-002 | 节点一致 | 权重在训练节点 | 合并请求发往训练节点 | | MERGE-003 | 合并归档 | 合并成功 | 结果上传 MinIO 并登记 | | MERGE-004 | 合并权限 | 无 execute 用户操作 | 返回 403 | | INF-001 | 列表加载 | 点击模型推理 | 列表快速显示,不长时间等待 | | INF-002 | 指定节点 | 多节点时选择节点 B | 模型只在 B 加载 | | INF-003 | 训练节点优先 | 未重新指定节点 | 优先使用训练节点 | | INF-004 | 推理缓存 | 启动未缓存模型 | 从 MinIO 下载到目标节点 | | INF-005 | 加载超时 | 模拟加载超过 15 分钟 | 失败并显示原因 | | INF-006 | 对话推理 | 发送消息 | 返回推理结果 | | INF-007 | 释放推理 | 点击释放 | 卸载模型并释放 GPU | | INF-008 | 删除推理 | 删除任务记录 | 记录删除成功并释放资源 | | EVAL-001 | 创建评测 | 选择模型、数据集、指标 | 任务创建成功 | | EVAL-002 | 数据集权限 | 选择无权数据集 | 不出现在选择列表 | | EVAL-003 | 指标保存 | 选择具体指标 | 结果不错误显示 custom | | EVAL-004 | 评测报告 | 等待任务完成 | 返回非空报告和明细 | | EVAL-005 | 页面轮询 | 打开评测页面 | 不刷屏,loading 可结束 | | OPS-001 | 审计 | 登录、创建、删除、执行资源 | 记录 actor/action/resource/time | | OPS-002 | 轮询日志 | 观察 Backend 日志 | 成功轮询不高频输出 INFO | | OPS-003 | 错误日志 | 模拟依赖异常 | 保留 WARNING/ERROR 和 request_id | | OPS-004 | 推理接口耗时 | 请求 `/model-compare` | 正常环境目标小于 1 秒 | | OPS-005 | 看板耗时 | 请求 `/dashboard/stats` | 有短缓存且不无限等待 | | OPS-006 | 并发访问 | 10 用户同时打开列表 | 无连接池耗尽和 5xx | | OPS-007 | 数据库断开 | 临时阻断 PostgreSQL | 页面明确显示依赖异常 | ## 回归命令 ```bash cd frontend npm run build cd .. python -m compileall backend/app compute git diff --check docker compose -f docker/app/docker-compose.yml ps docker compose -f docker/compute/docker-compose.yml ps curl http://localhost:17861/modelTF/health curl http://localhost:19100/modelTF/health ``` 失败用例必须附接口响应、容器日志、request_id 和复现步骤。