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正确账号密码登录存在账号 adminPOST 登录接口/或 UI 登录admin + 123456返回 200 及 JWT token、merchantId、shopName,跳转首页P0接口 自动化
AUTH-02错误密码同上输入错误密码密码错误值400/业务码提示「账号或密码错误」,不返回 tokenP0接口
AUTH-03不存在的账号-登录未注册账号提示「账号或密码错误」(不区分账号是否存在)P1接口
AUTH-04空参/脱敏校验-空账号或空密码登录"" / null参数校验失败提示,非 500P1接口
AUTH-05无 token 访问受保护接口未登录直接调销售/商品/赊账接口-JWT 拦截器拒绝,401/无业务数据P0接口 自动化
AUTH-06过期 token取得 token 后等待过期携带过期 token 请求ex-JWT401/提示 token 失效并引导重新登录P1接口
AUTH-07禁用账号登录账号 status=0登录被禁用账号-403「账号已被禁用」,不发 tokenP0接口
AUTH-08登出后 token 失效已登录登出后携带原 token 请求-Redis 会话删除,原 token 失效返回 401P1接口 自动化
AUTH-09登录返回商户信息登录成功解析登录响应/调 /auth/info-返回 username/nickname/shopName/merchantId/roleP1接口
AUTH-10密码最短 6 位校验UI输入 5 位密码提交"12345"前端校验「密码不少于 6 位」,不发请求P2UI
AUTH-11登录状态跨刷新保持已登录刷新页面-仍保持登录、路由不白屏P2UI
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 的 merchantIdmerchant=other后端忽略前端参数,仍按 admin 隔离返回其数据P0接口 自动化
TEN-03同名商品跨商户互不影响两商户均有「可乐」各自查询/销售同名商品可乐各按本商户数据操作,库存互不干扰P0接口
TEN-04商户上下文强制过滤admin 登录携带他人 goodsId 查详情/下单他商户 idMyBatis-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=""必填校验失败,非 500P1接口 自动化
GDS-03商品名称重复已存在同名商品再新增同名商品同名按业务规则提示或允许(口径与需求一致,待对齐唯一约束)P0接口
GDS-04售价为负拒绝-售价填负数salePrice=-1拒绝「售价不合法」P1接口 自动化
GDS-05进价/售价为 0 边界-售价填 0salePrice=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 新增→编辑→删除-页面元素、提示、跳转正确P2UI

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 边界-单价填 0purchasePrice=0允许(边界值)P1接口
PUR-06采购金额=数量×单价-核对 totalAmount10 件 × 5.5金额=55.00,精度正确P1接口
PUR-07采购后库存增加商品库存已知采购后查商品库存+quantity库存精确增加采购数量P0接口 自动化
PUR-08无供应商采购放行supplierId 为空提交无供应商采购单-允许,supplierName 为空快照P1接口
PUR-09采购列表筛选/分页多笔采购按商品名/供应商筛选翻页-结果符合筛选条件、分页不越界P2接口
PUR-10采购 UI 流程admin 登录UI 新增采购单-商品选择联动、金额展示、提交正确P2UI

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允许(边界值),总金额=0P1接口
SAL-07总金额=数量×单价-核对 totalAmount3 × 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 新建→填单→提交/退款-挂账联动、库存提示、提交正确P2UI

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-08QueryAgent 只读隔离查询上下文查询场景尝试写操作查询+写入混合QueryAgent 工具集只读,结构上无法调用写工具P0接口 自动化
AGT-09对话历史上下文保持多轮对话跨轮引用上文信息-ChatMemory 提供上下文,回答一致P1接口
AGT-10清空对话存在历史调 /chat/clear-会话上下文清空,新对话不引用旧上下文P2接口
AGT-11无 token 调 AI 接口拒绝未登录直调 /ai/chat-401 拒绝,不进入 Agent 流程P0接口 自动化
AGT-12AiChat UI 流式展示admin 登录UI 发起对话看流式输出-SSE 流式渲染、操作日志可见P2UI

7. 赊账台账(14)

用例编号用例名称前置条件测试步骤输入预期结果优先级层级
CRD-01挂账自动生成台账完成挂账销售查赊账列表-记录存在:金额=总额、未结清、到期+30 天、overdue=0P0接口 自动化
CRD-02还款金额>0 校验存在台账还款金额 0/负数amount=0/-1拒绝「还款金额必须大于 0」P0接口 自动化
CRD-03还款>欠款总额拒绝欠款 100还款 150amount=150拒绝「还款金额超出欠款总额」P0接口 自动化
CRD-04还款=欠款总额结清欠款 100还款 100amount=100状态变「已结清」(边界值)P0接口 自动化
CRD-05部分还款状态正确欠款 100还款 40amount=40状态变「部分还款」,欠款余额 60P1接口 自动化
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赊账台账 UIadmin 登录UI 查看/还款-状态展示、还款操作、提示正确P2UI

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-04X-Forwarded-For 伪造绕过(回归BUG-07)IP 被限流构造不同 X-Forwarded-For 再登录伪造 IP限流以真实 IP 为准,伪造头不可绕过P1接口
LIM-05Python 不可用降级规则引擎停 AI Agent 服务发起对话-降级规则引擎应答,不报 500、不悬挂P1接口
LIM-06AI 流式输出正常AI 服务正常调 /ai/chat/stream-SSE 逐段输出,正常结束并落日志P1接口
LIM-07AI 调用超时降级AI 响应慢模拟超时-超时后降级/友好提示,不悬挂P1接口
LIM-08AI 操作日志落库(回归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 卡片/排行渲染正确,无崩坏P2UI

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-07AI 流式日志最终落库(回归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 状态收敛,无悬挂 PendingWriteP1接口
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 深度一致性缺陷一一对应)。