TEST CASES · 128 ENTRIES · 11 MODULES
小薇进销存 · 测试用例设计文档
小薇 · 进销存智能 Agent —— 覆盖功能 / 接口自动化 / UI 自动化 / 性能与并发四大主题,共 128 条用例。
功能模块 11
接口自动化 55
UI 自动化 8
性能/并发 9
128测试用例总数
11功能模块
55接口自动化可回归
9性能/并发用例
测试环境:Java 后端 :8080(Knife4j doc.html) · AI Agent :8000 · 前端 :3000 | 接口工具:Postman + Knife4j | 接口自动化:Pytest+Requests+Allure | UI:Selenium+PO | 性能/并发:多线程脚本 + Linux 日志
标注说明:「层级」列 接口 = Postman/Knife4j 手动验证;接口自动化 = 已纳入 Pytest+Requests 回归脚本;UI = Selenium+PO;性能 = 并发脚本压测 / Linux 日志分析。
1. 登录鉴权与权限(12)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| AUTH-01 | 正确账号密码登录 | 存在账号 admin | POST 登录接口/或 UI 登录 | admin + 123456 | 返回 200 及 JWT token、merchantId、shopName,跳转首页 | P0 | 接口 自动化 |
| AUTH-02 | 错误密码 | 同上 | 输入错误密码 | 密码错误值 | 400/业务码提示「账号或密码错误」,不返回 token | P0 | 接口 |
| AUTH-03 | 不存在的账号 | - | 登录 | 未注册账号 | 提示「账号或密码错误」(不区分账号是否存在) | P1 | 接口 |
| AUTH-04 | 空参/脱敏校验 | - | 空账号或空密码登录 | "" / null | 参数校验失败提示,非 500 | P1 | 接口 |
| AUTH-05 | 无 token 访问受保护接口 | 未登录 | 直接调销售/商品/赊账接口 | - | JWT 拦截器拒绝,401/无业务数据 | P0 | 接口 自动化 |
| AUTH-06 | 过期 token | 取得 token 后等待过期 | 携带过期 token 请求 | ex-JWT | 401/提示 token 失效并引导重新登录 | P1 | 接口 |
| AUTH-07 | 禁用账号登录 | 账号 status=0 | 登录被禁用账号 | - | 403「账号已被禁用」,不发 token | P0 | 接口 |
| AUTH-08 | 登出后 token 失效 | 已登录 | 登出后携带原 token 请求 | - | Redis 会话删除,原 token 失效返回 401 | P1 | 接口 自动化 |
| AUTH-09 | 登录返回商户信息 | 登录成功 | 解析登录响应/调 /auth/info | - | 返回 username/nickname/shopName/merchantId/role | P1 | 接口 |
| AUTH-10 | 密码最短 6 位校验 | UI | 输入 5 位密码提交 | "12345" | 前端校验「密码不少于 6 位」,不发请求 | P2 | UI |
| AUTH-11 | 登录状态跨刷新保持 | 已登录 | 刷新页面 | - | 仍保持登录、路由不白屏 | P2 | UI |
| AUTH-12 | 多商户账号互不干扰 | admin/demo 均已登录 | 分别请求 /auth/info | - | 各返回本账号商户信息,token 不串用 | P1 | 接口 |
2. 多商户数据隔离(8)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| TEN-01 | 商户A看不到商户B数据 | admin/demo 均有商品与销售单 | admin 登录查列表 | 无 | 仅返回 admin 的数据(merchant_id 强制过滤) | P0 | 接口 |
| TEN-02 | 伪造 merchantId 越权 | admin 登录 | 请求参数改为 demo 的 merchantId | merchant=other | 后端忽略前端参数,仍按 admin 隔离返回其数据 | P0 | 接口 自动化 |
| TEN-03 | 同名商品跨商户互不影响 | 两商户均有「可乐」 | 各自查询/销售同名商品 | 可乐 | 各按本商户数据操作,库存互不干扰 | P0 | 接口 |
| TEN-04 | 商户上下文强制过滤 | admin 登录 | 携带他人 goodsId 查详情/下单 | 他商户 id | MyBatis-Plus 多租户插件强制 eq(merchant_id),查无或拒绝 | P1 | 接口 |
| TEN-05 | 挂账客户跨商户隔离 | 两商户有同名客户挂账 | 分别查赊账台账 | - | 各返回本商户台账,互不串扰 | P1 | 接口 |
| TEN-06 | 仪表盘统计按商户隔离 | 存在跨商户销售数据 | admin 调 /dashboard/stats | - | 统计仅含本商户数据 | P1 | 接口 |
| TEN-07 | 待办任务按商户隔离 | 两商户均有补货待办 | 分别查待办列表 | - | 各仅见本商户待办 | P1 | 接口 |
| TEN-08 | 并发下商户上下文不串 | 多商户并发请求 | 并发触发列表/统计查询 | 并发 | ThreadLocal 无脏数据,各请求拿到本商户数据 | P2 | 性能 |
3. 商品管理(10)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| GDS-01 | 新增商品正常 | admin 登录 | 新增商品 | 名称/分类/进价/售价 | 保存成功,列表可见 | P0 | 接口 自动化 |
| GDS-02 | 商品名称必填 | - | 名称为空保存 | name="" | 必填校验失败,非 500 | P1 | 接口 自动化 |
| GDS-03 | 商品名称重复 | 已存在同名商品 | 再新增同名商品 | 同名 | 按业务规则提示或允许(口径与需求一致,待对齐唯一约束) | P0 | 接口 |
| GDS-04 | 售价为负拒绝 | - | 售价填负数 | salePrice=-1 | 拒绝「售价不合法」 | P1 | 接口 自动化 |
| GDS-05 | 进价/售价为 0 边界 | - | 售价填 0 | salePrice=0 | 允许(边界值,售价=0 视为赠送) | P1 | 接口 |
| GDS-06 | 库存初始值校验 | - | 新增商品后查详情 | - | 库存字段默认 0 或按输入,不出现 null/负数 | P1 | 接口 |
| GDS-07 | 编辑商品后缓存刷新 | 商品已存在且列表已缓存 | 编辑售价后立即查列表 | 改价 | 写操作清缓存,列表立即返回新值(不读旧缓存) | P1 | 接口 自动化 |
| GDS-08 | 删除商品后详情 404 | 商品存在 | 删除后查详情 | - | 返回 404「商品不存在」 | P1 | 接口 自动化 |
| GDS-09 | 列表缓存命中/失效 | 有商品数据 | 连续查询 + 修改数据 | - | 缓存 TTL 10min 内命中,写后失效不返回脏数据 | P2 | 性能 |
| GDS-10 | 商品管理 UI 流程 | admin 登录 | UI 新增→编辑→删除 | - | 页面元素、提示、跳转正确 | P2 | UI |
4. 采购入库(10)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| PUR-01 | 正常采购入库 | 存在商品与供应商 | 提交采购单 | 商品+数量+单价 | 保存成功,进入列表 | P0 | 接口 自动化 |
| PUR-02 | 采购数量>0 校验 | - | 数量填 0 或负数 | quantity=0/-1 | 拒绝「采购数量必须大于 0」 | P0 | 接口 自动化 |
| PUR-03 | 采购数量极大值 | - | 填超大数量 | 99999999 | 类型/精度校验,不溢出错乱 | P1 | 接口 |
| PUR-04 | 采购单价为负拒绝 | - | 单价填负数 | purchasePrice=-1 | 拒绝「采购单价不合法」 | P1 | 接口 自动化 |
| PUR-05 | 采购单价=0 边界 | - | 单价填 0 | purchasePrice=0 | 允许(边界值) | P1 | 接口 |
| PUR-06 | 采购金额=数量×单价 | - | 核对 totalAmount | 10 件 × 5.5 | 金额=55.00,精度正确 | P1 | 接口 |
| PUR-07 | 采购后库存增加 | 商品库存已知 | 采购后查商品库存 | +quantity | 库存精确增加采购数量 | P0 | 接口 自动化 |
| PUR-08 | 无供应商采购放行 | supplierId 为空 | 提交无供应商采购单 | - | 允许,supplierName 为空快照 | P1 | 接口 |
| PUR-09 | 采购列表筛选/分页 | 多笔采购 | 按商品名/供应商筛选翻页 | - | 结果符合筛选条件、分页不越界 | P2 | 接口 |
| PUR-10 | 采购 UI 流程 | admin 登录 | UI 新增采购单 | - | 商品选择联动、金额展示、提交正确 | P2 | UI |
5. 销售出库 · 受理规则(18)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| SAL-01 | 正常销售(现金/已付款) | 商品有库存 | 提交销售单 | 商品+数量+售价 | 保存成功,payStatus=已付款,paidAmount=总额 | P0 | 接口 自动化 |
| SAL-02 | 销售数量>0 校验 | - | 数量填 0 或负数 | quantity=0/-1 | 拒绝「销售数量必须大于 0」 | P0 | 接口 自动化 |
| SAL-03 | 销售数量=0 拒绝 | - | 数量为 0 提交 | 0 | 拒绝(边界值=0 非法) | P0 | 接口 |
| SAL-04 | 销售数量极大值 | - | 填超大数量 | 99999999 | 类型/精度校验,金额不溢出 | P1 | 接口 |
| SAL-05 | 销售单价<0 拒绝 | - | 单价填负数 | salePrice=-1 | 拒绝「销售单价不合法」 | P0 | 接口 自动化 |
| SAL-06 | 销售单价=0 边界 | - | 单价填 0(赠送) | salePrice=0 | 允许(边界值),总金额=0 | P1 | 接口 |
| SAL-07 | 总金额=数量×单价 | - | 核对 totalAmount | 3 × 4.5 | 金额=13.50,BigDecimal 精度正确 | P0 | 接口 自动化 |
| SAL-08 | 挂账销售必须填写客户 | - | payStatus=挂账,客户为空 | - | 拒绝「挂账销售必须填写客户姓名」 | P0 | 接口 自动化 |
| SAL-09 | 挂账客户=「散客」拒绝 | - | 挂账客户填散客 | 客户=散客 | 拒绝(赊账必须有实名客户) | P0 | 接口 |
| SAL-10 | 挂账生成赊账记录 | 挂账销售成功 | 查赊账台账 | - | 生成记录:金额=总额、未结清、到期日=今日+30 天 | P0 | 接口 自动化 |
| SAL-11 | 库存不足拒绝出库 | 库存<数量 | 提交销售单 | 数量>库存 | 拒绝「库存不足」,事务回滚,单据不落库 | P0 | 接口 自动化 |
| SAL-12 | 商品不存在拒绝 | goodsId 无效 | 提交销售单 | 无效 id | 拒绝,不产生脏数据 | P1 | 接口 |
| SAL-13 | 正常退款库存回补 | 已售出单据 | 退款部分数量 | 数量≤原数量 | 库存回补、已付金额按比例冲减 | P1 | 接口 自动化 |
| SAL-14 | 退款数量>原销售数量拒绝 | 已售出单据 | 退款超额数量 | 数量>原数量 | 拒绝「退货数量不能超过原销售数量」 | P0 | 接口 自动化 |
| SAL-15 | 部分退款按比例冲减已付 | 已付款单据 | 退款 1 件 | 单价×件数 | paidAmount 精确冲减,不为负 | P1 | 接口 |
| SAL-16 | 挂账单退款同步冲减赊账 | 挂账销售已生成台账 | 退款后查台账 | - | 冲减最近未结清赊账记录,可能状态变「部分还款/已结清」 | P1 | 接口 自动化 |
| SAL-17 | 销售列表筛选/分页 | 多笔销售 | 按商品名/客户/日期筛选 | - | 结果符合筛选、分页不越界 | P2 | 接口 |
| SAL-18 | 销售 UI 流程(现金/挂账) | admin 登录 | UI 新建→填单→提交/退款 | - | 挂账联动、库存提示、提交正确 | P2 | UI |
6. Agent 对话与意图路由(12)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| AGT-01 | 查询意图识别 | 已有数据 | 对话「现在可乐库存多少」 | 查询语料 | Router 走 QueryAgent,返回真实库存,无写操作 | P0 | 接口 自动化 |
| AGT-02 | 写入意图生成预览不落库 | - | 对话「卖 10 瓶可乐」 | 写入语料 | 生成销售预览,业务未落库,等待确认 | P0 | 接口 自动化 |
| AGT-03 | 确认后落库 | 存在预览 | 对话「确认」 | 确认语料 | 落库成功,库存扣减,返回带证据的确认结果 | P0 | 接口 自动化 |
| AGT-04 | 修改意图重生成预览 | 存在预览 | 对话「改成 5 瓶」 | 修改语料 | 参数合并,重新生成预览,仍不落库 | P1 | 接口 自动化 |
| AGT-05 | 选择意图 | 预览含多商品候选项 | 对话「选 1」 | 选择语料 | 确定选中项,重新生成预览 | P1 | 接口 自动化 |
| AGT-06 | 补充意图合并参数 | 存在预览 | 对话「再进 3 箱雪碧」 | 补充语料 | 参数补充合并,重新生成预览 | P1 | 接口 自动化 |
| AGT-07 | 未确认写操作不落库(Guard) | - | 对话中诱导直接写入 | 自拼接预览 | Hallucination Guard 校验工具执行日志,拦截虚假「已录入」 | P0 | 接口 |
| AGT-08 | QueryAgent 只读隔离 | 查询上下文 | 查询场景尝试写操作 | 查询+写入混合 | QueryAgent 工具集只读,结构上无法调用写工具 | P0 | 接口 自动化 |
| AGT-09 | 对话历史上下文保持 | 多轮对话 | 跨轮引用上文信息 | - | ChatMemory 提供上下文,回答一致 | P1 | 接口 |
| AGT-10 | 清空对话 | 存在历史 | 调 /chat/clear | - | 会话上下文清空,新对话不引用旧上下文 | P2 | 接口 |
| AGT-11 | 无 token 调 AI 接口拒绝 | 未登录 | 直调 /ai/chat | - | 401 拒绝,不进入 Agent 流程 | P0 | 接口 自动化 |
| AGT-12 | AiChat UI 流式展示 | admin 登录 | UI 发起对话看流式输出 | - | SSE 流式渲染、操作日志可见 | P2 | UI |
7. 赊账台账(14)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| CRD-01 | 挂账自动生成台账 | 完成挂账销售 | 查赊账列表 | - | 记录存在:金额=总额、未结清、到期+30 天、overdue=0 | P0 | 接口 自动化 |
| CRD-02 | 还款金额>0 校验 | 存在台账 | 还款金额 0/负数 | amount=0/-1 | 拒绝「还款金额必须大于 0」 | P0 | 接口 自动化 |
| CRD-03 | 还款>欠款总额拒绝 | 欠款 100 | 还款 150 | amount=150 | 拒绝「还款金额超出欠款总额」 | P0 | 接口 自动化 |
| CRD-04 | 还款=欠款总额结清 | 欠款 100 | 还款 100 | amount=100 | 状态变「已结清」(边界值) | P0 | 接口 自动化 |
| CRD-05 | 部分还款状态正确 | 欠款 100 | 还款 40 | amount=40 | 状态变「部分还款」,欠款余额 60 | P1 | 接口 自动化 |
| CRD-06 | 还款并发丢更新(回归BUG-03) | 欠款 100 | 两请求并发各还 60 | 并发=2 | 后写不覆盖先写,合计冲减不超欠款总额 | P0 | 自动化 性能 |
| CRD-07 | 台账分页/状态筛选 | 多笔台账 | 按客户/状态筛选翻页 | - | 结果符合筛选、分页不越界 | P2 | 接口 |
| CRD-08 | 客户名前后空格归一化(回归BUG-09) | 客户「张三」 | 挂账客户填「 张三 」 | 带空格 | trim 归一化后视为同一客户,台账合并 | P2 | 接口 自动化 |
| CRD-09 | 退款冲减最近未结清记录(回归BUG-08) | 同客户多笔挂账 | 对早先挂账单退款 | - | 冲减到正确对应记录,不冲错台账 | P1 | 接口 |
| CRD-10 | 逾期标记计算 | 存在过期未结清台账 | 查台账列表 | - | overdue 字段按到期日正确标记 | P2 | 接口 |
| CRD-11 | 挂账无额度上限(回归BUG-02) | 客户已有大额欠款 | 继续挂账销售 | - | 按需求口径:应有额度上限校验或显著提示(当前缺失) | P0 | 接口 |
| CRD-12 | 多笔挂账还款顺序正确 | 同一客户 2 笔台账 | 分两笔还款 | - | 各记录独立冲减,互不串 | P2 | 接口 |
| CRD-13 | 手动台账保存默认值 | - | 手动新增台账 | 仅客户+金额 | paidAmount=0、status=未结清、overdue=0 默认值正确 | P2 | 接口 |
| CRD-14 | 赊账台账 UI | admin 登录 | UI 查看/还款 | - | 状态展示、还款操作、提示正确 | P2 | UI |
8. 库存与状态机约束(12)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| INV-01 | 库存不足拒绝出库 | 库存<销售数量 | 提交销售单 | 数量>库存 | 拒绝并提示当前库存,事务回滚 | P0 | 接口 自动化 |
| INV-02 | 库存=0 销售拒绝 | 库存 0 | 提交销售单 | 数量=1 | 拒绝(边界值=0 库存) | P0 | 接口 |
| INV-03 | 销售后库存精确扣减 | 库存已知 | 销售后查库存 | -quantity | 库存精确扣减,无浮点/单位误差 | P0 | 接口 自动化 |
| INV-04 | 退款后库存回补 | 已退款 | 退款后查库存 | +quantity | 库存精确回补 | P1 | 接口 自动化 |
| INV-05 | 采购后库存增加 | 库存已知 | 采购后查库存 | +quantity | 库存精确增加(与 PUR-07 一致) | P0 | 接口 |
| INV-06 | 低库存巡检生成补货待办 | 商品库存<安全库存 | 触发巡检任务 | - | 生成补货待办(建议量=安全库存×2-当前) | P1 | 接口 自动化 |
| INV-07 | 安全库存边界不生成待办 | 库存=安全库存 | 触发巡检 | stock==safe | 不生成待办(边界值 >= 不触发) | P1 | 接口 |
| INV-08 | 待办处理状态流转 | 存在待办 | 调 /todo/handle/{id} | - | 待办状态「待处理」→已处理,不可重复处理 | P1 | 接口 |
| INV-09 | 待办重复生成幂等 | 低库存商品 | 重复触发巡检 | - | 同一商品不重复生成相同待办(幂等) | P1 | 接口 |
| INV-10 | 商品删除后无法销售 | 商品已删除 | 用已删商品提交销售 | - | 拒绝,不产生孤儿单据 | P1 | 接口 |
| INV-11 | 缓存失效后读 DB 兜底 | Redis 不可用 | 查商品/库存 | - | 降级读 DB,不报 500、不返回空 | P2 | 性能 |
| INV-12 | 并发销售超卖(回归BUG-01) | 库存紧平衡 | 同商品并发销售 | 并发数>1 | 扣减原子化,不超卖、不为负 | P0 | 自动化 性能 |
9. 登录限流与 AI 链路容错(10)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| LIM-01 | 登录超频触发限流 | 同一 IP | 短时间内连续登录 11 次 | 频率>10次/分 | 第 11 次起返回 429「登录尝试过于频繁」 | P0 | 接口 自动化 性能 |
| LIM-02 | 限流窗口重置后可再登录 | 已被限流 | 等待 1 分钟窗口后登录 | - | 窗口重置,可正常登录 | P1 | 接口 |
| LIM-03 | 限流仅针对登录接口 | - | 高频调业务接口 | - | 业务接口不受登录限流影响 | P2 | 接口 |
| LIM-04 | X-Forwarded-For 伪造绕过(回归BUG-07) | IP 被限流 | 构造不同 X-Forwarded-For 再登录 | 伪造 IP | 限流以真实 IP 为准,伪造头不可绕过 | P1 | 接口 |
| LIM-05 | Python 不可用降级规则引擎 | 停 AI Agent 服务 | 发起对话 | - | 降级规则引擎应答,不报 500、不悬挂 | P1 | 接口 |
| LIM-06 | AI 流式输出正常 | AI 服务正常 | 调 /ai/chat/stream | - | SSE 逐段输出,正常结束并落日志 | P1 | 接口 |
| LIM-07 | AI 调用超时降级 | AI 响应慢 | 模拟超时 | - | 超时后降级/友好提示,不悬挂 | P1 | 接口 |
| LIM-08 | AI 操作日志落库(回归BUG-05) | 完成对话 | 查 /ai/log/page | - | 流式与非流式对话均落操作日志,AiLog 页可见 | P1 | 接口 自动化 |
| LIM-09 | 非法路径 404 | - | 访问非法路由 | - | 正确返回 404,不泄露内部错误 | P2 | 接口 |
| LIM-10 | 巡检定时任务降级 | Python 不可用 | 触发每日巡检 | - | 降级本地巡检,仍能生成补货待办 | P2 | 接口 |
10. 对账与统计报表(8)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| DSH-01 | 今日销售额口径 | 有今日销售数据 | 调 /dashboard/stats | - | 今日金额/单数与销售明细一致 | P0 | 接口 |
| DSH-02 | 本月销售额口径 | 有本月数据 | 统计本月 | - | 本月金额与明细一致,跨月数据不混入 | P1 | 接口 自动化 |
| DSH-03 | 毛利计算口径 | 有进销价 | 核对毛利 | - | 毛利=Σ(售价-进价)×数量,与明细一致 | P1 | 接口 |
| DSH-04 | 今日/本月销售单数 | 有数据 | 核对单数 | - | todayCount/monthCount 正确 | P2 | 接口 |
| DSH-05 | 空数据报表 | 无数据 | 统计空商户 | - | 返回 0 值或友好空态,不报错 | P2 | 接口 |
| DSH-06 | 排行 limit 边界 | 有销售数据 | limit=0 / 51 / 50 | - | 非法 limit 回退默认 10,50 合法 | P2 | 接口 |
| DSH-07 | 统计按商户隔离 | 跨商户数据 | admin 统计 | - | 仅含本商户(同 TEN-06) | P1 | 接口 |
| DSH-08 | 仪表盘 UI 展示 | admin 登录 | 打开首页看 KPI | - | KPI 卡片/排行渲染正确,无崩坏 | P2 | UI |
11. 深度一致性:库存并发 / 缓存双写 / 最终一致性(14)
| 用例编号 | 用例名称 | 前置条件 | 测试步骤 | 输入 | 预期结果 | 优先级 | 层级 |
| CON-01 | 库存并发扣减不超卖(回归BUG-01) | 库存接近销量之和 | 同商品多单并发销售 | 并发数>1 | 扣减原子化,总销量≤库存,不为负 | P0 | 自动化 性能 |
| CON-02 | 缓存与 DB 库存双写一致(回归BUG-04) | 商品已缓存 | 销售后立即查列表/详情 | - | 写操作清缓存成功,缓存值=DB 值,无旧库存残留 | P0 | 自动化 |
| CON-03 | 事务回滚后缓存不残留旧库存(回归BUG-04) | 销售触发库存不足 | 在回滚后读缓存/DB | 故障注入 | 回滚后缓存与 DB 一致,不读到脏库存 | P0 | 自动化 |
| CON-04 | 还款并发不丢更新(回归BUG-03) | 欠款 100 | 两请求并发还款 60 | 并发=2 | 乐观锁/原子更新,冲减不丢失、不超欠款 | P0 | 自动化 |
| CON-05 | 挂账并发不无限透支(回归BUG-02) | 客户额度临界 | 同客户并发挂账销售 | 并发数>1 | 额度校验原子化,不超额度上限 | P0 | 自动化 |
| CON-06 | 确认落库后 PendingWrite 清理(回归BUG-06) | 确认操作成功 | 确认后再发起新对话 | - | Redis 待确认状态清理,新对话不被残留状态劫持 | P0 | 自动化 |
| CON-07 | AI 流式日志最终落库(回归BUG-05) | 流式对话完成 | 结束后查 AiLog | - | 操作日志最终一致,无缺失 | P1 | 自动化 |
| CON-08 | 退款冲减赊账选对记录(回归BUG-08) | 同客户多笔挂账 | 对指定挂账单退款 | - | 冲减与单据对应的台账记录,不冲错对象 | P1 | 自动化 |
| CON-09 | 巡检降级与 Agent 巡检结果一致 | Python 恢复 | 对比降级与 Agent 巡检待办 | - | 口径一致,不产生重复/冲突待办 | P1 | 接口 |
| CON-10 | 重复提交销售单幂等 | 同一单据 | 同一请求重复提交 | - | 幂等处理,不重复扣库存、不重复生成赊账 | P0 | 接口 |
| CON-11 | 客户名归一化(回归BUG-09) | 存在带空格客户 | 查询/挂账同名客户 | - | trim 后判同,台账与销售对得上 | P2 | 接口 |
| CON-12 | 库存/台账/仪表盘三处对账一致 | 复杂购销挂账后 | 对账比对三处 | - | 库存、赊账余额、统计口径最终一致 | P1 | 接口 |
| CON-13 | 流式中断后状态收敛 | SSE 中断 | 中断后重发请求 | - | Agent 状态收敛,无悬挂 PendingWrite | P1 | 接口 |
| CON-14 | 多商户并发下数据不串 | 多商户并发写 | 并发销售+查询混合 | 并发 | 商户上下文隔离,无跨商户脏写 | P2 | 性能 |
总数统计:AUTH 12 + TEN 8 + GDS 10 + PUR 10 + SAL 18 + AGT 12 + CRD 14 + INV 12 + DSH 8 + CON 12 + PERF 12 = 128 条(其中接口自动化覆盖见 api_test_automation,UI 见 web_auto_test,并发压测见 concurrency_test;CON 系列与 Bug 报告 BUG-01~10 深度一致性缺陷一一对应)。