64 KiB
64 KiB
订单全流程管理系统 — 完整测试计划
日期: 2026-06-18 范围: 后端 API (FastAPI) + Web Admin (Vue 3) + Web Sales (Vue 3) + 微信小程序 目标: 覆盖系统全部功能模块,识别现有测试缺口,制定分优先级的测试执行计划
目录
- 测试目标与策略
- 测试环境要求
- 模块一:认证与授权
- 模块二:订单生命周期
- 模块三:订单取消流程
- 模块四:客户管理
- 模块五:产品与分类管理
- 模块六:供应商管理
- 模块七:定价引擎
- 模块八:物流与配送
- 模块九:AI 图像识别
- 模块十:文件管理
- 模块十一:提醒中心
- 模块十二:报表与统计
- 模块十三:系统管理
- 模块十四:系统配置
- 模块十五:审计日志
- 模块十六:WebSocket 实时推送
- 模块十七:微信小程序集成
- 模块十八:Web Admin 前端
- 模块十九:Web Sales 前端
- 模块二十:跨模块端到端流程
- 现有测试缺口汇总
- 测试执行优先级
- 验收标准
1. 测试目标与策略
1.1 测试目标
| 编号 | 目标 | 说明 |
|---|---|---|
| T-1 | 数据闭环 | 从创建到完成,所有业务数据在各环节完整传递 |
| T-2 | 状态机收敛 | 订单和物流任务的状态转换严格遵循定义的状态机 |
| T-3 | 权限隔离 | 4 种角色 (admin/manager/salesman/driver) 的数据和操作权限严格隔离 |
| T-4 | 配置驱动 | 定价规则、提醒规则等业务规则通过配置驱动,修改即时生效 |
| T-5 | 外部集成 | OCR、快递100、微信推送等外部服务的正确调用和异常处理 |
| T-6 | UI 回归 | 前端各页面的交互流程、数据展示、权限控制正确 |
1.2 测试层次
| 层次 | 占比 | 工具 | 说明 |
|---|---|---|---|
| 单元测试 | 40% | pytest | Service/Repository 层隔离测试 |
| API 集成测试 | 35% | pytest + TestClient | 端点级别请求/响应验证 |
| 前端 E2E 测试 | 15% | Playwright | 浏览器级别的用户操作流程 |
| 手动测试 | 10% | 人工 | 微信小程序、外部服务联调 |
1.3 角色定义
| 角色 | 代码 | 权限范围 |
|---|---|---|
| 超级管理员 | admin | 全部功能 |
| 经理 | manager | 审批、报表、主数据管理、物流任务管理 |
| 业务员 | salesman | 创建/编辑/提交订单、客户管理、个人统计 |
| 司机 | driver | 接单、提货、送达、运单管理 |
2. 测试环境要求
2.1 后端测试
- Python 3.10+, pytest, httpx
- 内存 SQLite (单元/API测试) 或 MySQL测试库 (集成测试)
- Redis (WebSocket/Pub-Sub 测试)
- Mock 外部服务: Aliyun OSS, OCR, 快递100, 微信API, LLM
2.2 前端测试
- Node.js 18+, Playwright
- web-admin (port 5173), web-sales (port 5174)
- Chromium 浏览器
2.3 测试数据
- conftest.py 中已有的 fixtures: make_customer, make_product, make_supplier, make_order, make_task
- 7 个测试用户: admin01, sales01, sales02, manager01, driver01, driver02, secretary01
3. 模块一:认证与授权
3.1 登录功能
| 用例编号 | 测试项 | 输入 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AUTH-001 | 管理员正常登录 | admin01/正确密码, role_type=admin | 返回 JWT token, 用户信息 | P0 | ✅ test_admin_login_success |
| AUTH-001b | 业务员正常登录 | sales01/正确密码, role_type=salesman | 返回 JWT token, 用户信息 | P0 | ✅ test_salesman_login_success |
| AUTH-001c | 经理正常登录 | manager01/正确密码, role_type=manager | 返回 JWT token, 用户信息 | P0 | ✅ test_manager_login_success |
| AUTH-001d | 司机正常登录 | driver01/正确密码, role_type=driver | 返回 JWT token, 用户信息 | P0 | ✅ test_driver_login_success |
| AUTH-002 | 密码错误 | admin01/错误密码 | 返回 401, 错误消息 | P0 | ✅ test_wrong_password |
| AUTH-003 | 角色不匹配 | sales01/正确密码, role_type=admin | 返回 401, 角色不匹配 | P0 | ✅ test_role_mismatch |
| AUTH-004 | 禁用用户登录 | 已禁用用户 | 返回 401, 用户已禁用 | P0 | ✅ test_disabled_user |
| AUTH-004b | 不存在的用户 | nonexistent_user | 返回 401 | P1 | ✅ test_nonexistent_user |
| AUTH-004c | 空用户名 | username="" | 返回 422 参数校验失败 | P1 | ❌ 缺失 |
| AUTH-004d | 空密码 | password="" | 返回 422 参数校验失败 | P1 | ❌ 缺失 |
| AUTH-004e | SQL注入尝试 | username="' OR 1=1 --" | 返回 401, 无注入 | P1 | ❌ 缺失 |
3.2 Token 管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AUTH-005 | 无 Token 访问受保护接口 | 不带 Authorization header | 返回 401 | P0 | ✅ test_no_token_access |
| AUTH-006 | 无效 Token | Authorization: Bearer invalid_token | 返回 401 | P0 | ✅ test_invalid_token |
| AUTH-006b | 过期 Token | 使用已过期的 JWT | 返回 401 | P0 | ✅ test_expired_token |
| AUTH-006c | Token 自动续期 | Token 剩余 <30 天时请求 | 响应头包含 X-New-Token | P1 | ❌ 缺失 |
| AUTH-006d | 被注销的 Token | logout 后使用旧 token | 返回 401 | P0 | ✅ test_logout_token_invalidated |
| AUTH-006e | 并发 Token 刷新 | 多个请求同时触发续期 | 所有请求成功,token 一致 | P2 | ❌ 缺失 |
3.3 用户信息
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AUTH-010 | /me 返回用户菜单 | GET /api/auth/me | 返回用户可见的菜单树 | P0 | ✅ test_me_returns_menus |
| AUTH-011 | /me 返回权限列表 | GET /api/auth/me | 返回 permission_codes 列表 | P0 | ✅ test_me_returns_permissions |
| AUTH-011b | /me 返回角色信息 | GET /api/auth/me | 包含 role_code 字段 | P1 | ✅ test_me_returns_user_info |
3.4 微信登录
| 用例编号 | 测试项 | 输入 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AUTH-012 | 微信手机号一键登录 | 有效 phone_code | 返回 JWT + 用户信息 | P0 | ❌ 缺失 |
| AUTH-012b | 微信登录 - 无效 code | 无效 phone_code | 返回 401 | P1 | ❌ 缺失 |
| AUTH-012c | 绑定 OpenID | POST /api/auth/bind-openid | 成功绑定 | P1 | ❌ 缺失 |
| AUTH-012d | 通过 wx.code 绑定 OpenID | POST /api/auth/bind-openid-by-code | 成功绑定 | P1 | ❌ 缺失 |
3.5 权限边界
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AUTH-007 | 业务员不能审批订单 | salesman 调用 approve | 返回 403 | P0 | ✅ test_salesman_cannot_approve |
| AUTH-007b | 业务员不能管理系统 | salesman 调用 /api/system/* | 返回 403 | P0 | ✅ test_salesman_cannot_manage_system |
| AUTH-007c | 司机不能审批订单 | driver 调用 approve | 返回 403 | P0 | ✅ test_driver_cannot_approve |
| AUTH-009 | 司机无财务权限 | driver 查看订单财务字段 | 字段被隐藏/脱敏 | P0 | ✅ test_driver_no_financial_permissions |
| AUTH-009b | 经理不能管理用户 | manager 调用 /api/system/users | 返回 403 | P0 | ✅ test_manager_cannot_manage_users |
| AUTH-009c | 管理员全权限 | admin 调用所有接口 | 全部返回 200 | P0 | ✅ test_admin_can_do_everything |
| AUTH-009d | 业务员不能创建物流任务 | salesman 调用 POST /api/logistics/tasks | 返回 403 | P0 | ❌ 缺失 |
| AUTH-009e | 司机不能查看报表 | driver 调用 /api/reports/* | 返回 403 | P1 | ✅ test_driver_cannot_view_report |
4. 模块二:订单生命周期
4.1 创建订单
| 用例编号 | 测试项 | 输入 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ORD-001 | 创建草稿订单 | 有效订单数据 + 行项 | 返回订单详情, status=draft | P0 | ✅ test_create_draft_order |
| ORD-002 | 新客户自动创建 | 订单中包含不存在的客户名+手机 | 自动创建客户记录 | P0 | ✅ test_new_customer_auto_created |
| ORD-003 | 利润自动计算 | 有成本价和售价的行项 | profit = 售价总额 - 成本总额 | P0 | ✅ test_profit_calculation |
| ORD-004 | 固定佣金保存 | commission_amount=500 | 记录佣金金额 | P1 | ❌ 缺失 |
| ORD-005 | 无行项订单拒绝 | items=[] | 返回 400 | P0 | ✅ test_create_order_no_items |
| ORD-006 | 数量为零拒绝 | quantity=0 | 返回 400 | P0 | ✅ test_create_order_zero_quantity |
| ORD-006b | 负数价格拒绝 | unit_price=-10 | 返回 400 | P1 | ❌ 缺失 |
| ORD-006c | 缺少必填字段 | 缺少 customer_name | 返回 422 | P1 | ❌ 缺失 |
| ORD-006d | 禁用产品不能下单 | 行项包含已禁用产品 | 返回 400 | P0 | ✅ test_disabled_product_cannot_order |
| ORD-006e | 超长备注截断 | remark 10000字 | 正常保存或截断 | P2 | ❌ 缺失 |
| ORD-021 | 管理员代业务员创建 | admin 指定 salesman_id | 订单归属指定业务员 | P1 | ❌ 缺失 (admin create) |
4.2 编辑订单
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ORD-017 | 编辑草稿订单 | 修改行项和金额 | 更新成功,金额重算 | P0 | ✅ test_edit_draft_order |
| ORD-017b | 编辑非草稿订单 | 编辑 pending_approve 订单 | 返回 400,只能编辑草稿 | P0 | ❌ 缺失 |
| ORD-017c | 他人订单不能编辑 | sales01 编辑 sales02 的订单 | 返回 403 或 404 | P0 | ❌ 缺失 |
| ORD-017d | 管理员可编辑任意订单 | admin 编辑任意业务员订单 | 更新成功 | P1 | ❌ 缺失 |
4.3 提交审批
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ORD-007 | 提交草稿订单 | POST /{id}/submit | status → pending_approve | P0 | ✅ test_submit_order_success |
| ORD-008 | 重复提交拒绝 | 对 pending_approve 订单再次提交 | 返回 400 | P0 | ✅ test_double_submit |
| ORD-018 | 保存并提交 | 创建时直接提交 | status → pending_approve | P1 | ❌ 缺失 |
4.4 审批流程
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ORD-009 | 审批通过 | manager 审批 pending_approve 订单 | status → approved, 写入审批日志 | P0 | ✅ test_approve_order_success |
| ORD-010 | 审批拒绝 | manager 拒绝 pending_approve 订单 | status → rejected, 写入拒绝原因 | P0 | ✅ test_reject_order_success |
| ORD-010b | 审批非待审订单 | 审批 draft 订单 | 返回 400 | P0 | ✅ test_approve_non_pending_order |
| ORD-010c | 业务员不能审批 | salesman 调用审批接口 | 返回 403 | P0 | ✅ test_salesman_cannot_approve |
| ORD-019 | 审批详情显示利润 | 审批详情页 | 显示利润计算明细 | P1 | ❌ 缺失 |
| ORD-020 | 拒绝后通知业务员 | 拒绝订单 | 业务员收到提醒通知 | P1 | ❌ 缺失 |
4.5 供应商文本
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ORD-011 | 生成供应商文本 | approved 订单生成文本 | 返回生成的文本内容 | P0 | ✅ test_generate_supplier_text |
| ORD-012 | 确认供应商文本 | 确认文本 | status → pending_factory, 记录日志 | P0 | ✅ test_confirm_supplier_text |
| ORD-013 | 未审批订单不能确认文本 | 对非 approved 订单确认 | 返回 400 | P0 | ✅ test_confirm_text_not_approved |
4.6 状态流转
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ORD-022 | 完整状态流转 | draft→pending→approved→pending_factory | 每步状态正确 | P0 | ✅ test_full_status_flow |
| ORD-022b | 手动变更状态 | POST /{id}/status | 管理员可手动推进状态 | P1 | ❌ 缺失 |
| ORD-022c | 非法状态转换 | pending_factory → draft | 返回 400 | P0 | ❌ 缺失 |
4.7 订单查询
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ORD-014 | 订单列表查询 | GET /api/orders | 返回分页列表 | P0 | ✅ test_list_orders |
| ORD-014b | 按状态筛选 | ?status=draft | 只返回 draft 订单 | P1 | ❌ 缺失 |
| ORD-014c | 按客户名筛选 | ?customer_name=张 | 匹配客户名 | P1 | ❌ 缺失 |
| ORD-014d | 按日期范围筛选 | ?start_date=&end_date= | 匹配日期范围 | P1 | ❌ 缺失 |
| ORD-014e | 分页参数 | ?page=2&page_size=10 | 返回第2页10条 | P1 | ❌ 缺失 |
| ORD-015 | 业务员查看详情-无财务字段 | salesman 查看详情 | 隐藏成本/利润字段 | P0 | ✅ test_salesman_order_detail_no_finance |
| ORD-016 | 经理查看详情-含财务字段 | manager 查看详情 | 显示成本/利润字段 | P0 | ✅ test_manager_order_detail_with_finance |
5. 模块三:订单取消流程
5.1 直接取消
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CAN-001 | 取消草稿订单 | 取消 draft 订单 | status → canceled | P0 | ✅ test_cancel_draft_order |
| CAN-002 | 取消待审批订单 | 取消 pending_approve 订单 | status → canceled | P0 | ✅ test_cancel_pending_approve_order |
| CAN-007 | 重复取消拒绝 | 对已取消订单再次取消 | 返回 400 | P0 | ✅ test_already_canceled_order |
| CAN-008 | 取消必须填原因 | 不填 cancel_reason | 返回 400 | P0 | ✅ test_cancel_reason_required |
5.2 审批后取消 (取消审批流)
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CAN-003 | 已审批订单申请取消 | 提交取消申请 | status → cancel_pending | P0 | ✅ test_approved_order_cancel_request |
| CAN-005 | 管理员批准取消 | manager 批准 | status → canceled | P0 | ✅ test_cancel_approved_by_manager |
| CAN-006 | 管理员拒绝取消 | manager 拒绝 | status 恢复原状态 | P0 | ✅ test_cancel_rejected_by_manager |
5.3 履行阶段取消
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CAN-004 | 履行阶段申请取消 | pending_factory 订单申请取消 | status → cancel_pending | P0 | ✅ test_fulfillment_cancel_request |
| CAN-009 | 履行取消批准 | 批准履行阶段取消 | status → canceled | P0 | ✅ test_fulfillment_cancel_approved |
| CAN-010 | 履行取消拒绝 | 拒绝履行阶段取消 | status 恢复 | P0 | ✅ test_fulfillment_cancel_rejected |
| CAN-011 | 取消审计日志 | 取消操作 | 记录操作日志 | P0 | ✅ test_cancel_audit_log |
| CAN-011b | 已完成订单不能取消 | 完成的订单申请取消 | 返回 400 | P1 | ❌ 缺失 |
6. 模块四:客户管理
6.1 CRUD 操作
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CUS-001 | 创建客户 | 有效数据 | 创建成功, 返回详情 | P0 | ✅ test_create_customer_success |
| CUS-002 | 重复客户检测 | 同名+同手机号 | 返回 400 或提示重复 | P0 | ✅ test_duplicate_customer_name_mobile |
| CUS-003 | 手机号必填 | mobile 为空 | 返回 422 | P0 | ✅ test_customer_mobile_required |
| CUS-003b | 无效手机号格式 | mobile="abc" | 返回 422 | P1 | ❌ 缺失 |
| CUS-004 | 列表筛选 | ?name=张&phone=138 | 筛选正确 | P1 | ✅ test_filter_customers_by_name |
| CUS-004b | 按结算方式筛选 | ?settlement=月结 | 筛选正确 | P1 | ❌ 缺失 |
| CUS-004c | 按客户类型筛选 | ?type=企业 | 筛选正确 | P1 | ❌ 缺失 |
| CUS-005 | 客户详情 | GET /{id} | 返回完整客户信息 | P1 | ✅ test_customer_detail |
| CUS-005b | 更新客户 | PUT /{id} | 更新成功 | P1 | ❌ 缺失 |
6.2 权限与数据隔离
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CUS-008 | 业务员只能看自己的客户 | salesman 查询 | 只返回自己的客户 | P0 | ✅ test_salesman_only_see_own_customers |
| CUS-008b | 管理员看全部客户 | admin 查询 | 返回所有客户 | P0 | ✅ test_admin_see_all_customers |
| CUS-008c | 经理看全部客户 | manager 查询 | 返回所有客户 | P1 | ❌ 缺失 |
6.3 批量导入
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CUS-006 | 下载导入模板 | GET /import-template | 返回 Excel 文件 | P1 | ❌ 缺失 |
| CUS-006b | 批量导入客户 | POST /import 上传 Excel | 成功导入, 返回统计 | P1 | ❌ 缺失 |
| CUS-006c | 导入重复客户 | Excel 中含已有客户 | 跳过或更新, 报告结果 | P1 | ❌ 缺失 |
| CUS-006d | 导入格式错误 | Excel 格式不正确 | 返回错误提示 | P1 | ❌ 缺失 |
6.4 删除操作
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CUS-007 | 软删除客户 | DELETE /{id} | deleted=1, 不再列表显示 | P1 | ❌ 缺失 |
| CUS-007b | 硬删除客户 | DELETE /{id}/permanent | 物理删除 | P1 | ❌ 缺失 |
| CUS-007c | 有活跃订单的客户不能硬删 | 硬删有订单的客户 | 返回 400 | P0 | ❌ 缺失 |
| CUS-007d | 批量删除 | POST /batch-delete | 批量软/硬删除 | P1 | ❌ 缺失 |
6.5 客户欠款
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CUS-009 | 月结客户标记 | 查看月结客户详情 | is_monthly=true | P1 | ✅ test_monthly_customer_flag |
| CUS-010 | 欠款信息展示 | 客户详情含欠款 | 显示欠款金额和到期日 | P1 | ❌ 缺失 |
7. 模块五:产品与分类管理
7.1 分类管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| PROD-001 | 创建分类 | 有效数据 | 创建成功 | P1 | ✅ test_create_category_success |
| PROD-002 | 分类编码重复 | 重复 code | 返回 400 | P1 | ✅ test_duplicate_category_code |
| PROD-003 | 禁用分类 | 禁用已有产品的分类 | 禁用成功 | P1 | ✅ test_disable_category |
| PROD-003b | 硬删除有产品的分类 | DELETE permanent | 返回 400 | P1 | ❌ 缺失 |
| PROD-003c | 批量删除分类 | POST batch-delete | 批量删除 | P1 | ❌ 缺失 |
7.2 产品管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| PROD-004 | 创建产品 | 有效数据 + 规格 | 创建成功, 含规格列表 | P1 | ✅ test_create_product_success |
| PROD-005 | 产品列表筛选 | 多条件筛选 | 筛选正确 | P1 | ✅ test_product_list_filter |
| PROD-006 | 产品详情 | GET /{id} | 返回产品+规格列表 | P1 | ✅ test_product_detail |
| PROD-007 | 禁用产品标记 | 查看禁用产品 | disabled=true | P1 | ✅ test_disabled_product_flag |
| PROD-007b | 产品多规格 | 添加多个规格 | 规格列表正确 | P1 | ❌ 缺失 |
| PROD-007c | 设置默认规格 | PUT specifications/default | 默认规格更新 | P1 | ❌ 缺失 |
| PROD-007d | 硬删除有定价规则的产品 | DELETE permanent | 返回 400 | P1 | ❌ 缺失 |
7.3 产品快照
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| PROD-008 | 历史订单快照不变 | 修改产品后查看历史订单 | 订单行项数据保持不变 | P0 | ❌ 缺失 |
8. 模块六:供应商管理
8.1 CRUD 操作
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| FAC-001 | 创建供应商 | 有效数据 | 创建成功 | P1 | ✅ test_create_supplier_success |
| FAC-002 | 供应商列表筛选 | 多条件筛选 | 筛选正确 | P1 | ✅ test_supplier_list_filter |
| FAC-002b | 供应商详情 | GET /{id} | 返回完整信息 | P1 | ✅ test_supplier_detail |
| FAC-002c | 更新供应商 | PUT /{id} | 更新成功 | P1 | ❌ 缺失 |
| FAC-002d | 软删除供应商 | DELETE /{id} | deleted=1 | P1 | ❌ 缺失 |
| FAC-002e | 硬删除有订单的供应商 | DELETE /{id}/permanent | 返回 400 | P1 | ❌ 缺失 |
| FAC-002f | 批量删除供应商 | POST /batch-delete | 批量删除 | P1 | ❌ 缺失 |
9. 模块七:定价引擎
9.1 定价规则
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| PRICE-001 | 创建面积定价规则 | pricing_type=area | 规则创建成功 | P0 | ❌ 缺失 (独立测试) |
| PRICE-002 | 创建重量定价规则 | pricing_type=kg | 规则创建成功 | P0 | ❌ 缺失 |
| PRICE-003 | 创建按件定价规则 | pricing_type=unit | 规则创建成功 | P1 | ❌ 缺失 |
| PRICE-004 | 创建按米定价规则 | pricing_type=linear_m | 规则创建成功 | P1 | ❌ 缺失 |
| PRICE-005 | 更新定价规则 | PUT /{id} | 更新成功 | P1 | ❌ 缺失 |
| PRICE-006 | 删除定价规则 | DELETE /{id} | 软删除成功 | P1 | ❌ 缺失 |
| PRICE-007 | 按产品查询定价规则 | GET /{product_id} | 返回该产品的规则 | P1 | ❌ 缺失 |
9.2 报价计算
| 用例编号 | 测试项 | 输入 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| PRICE-010 | 面积报价计算 | 长=1m, 宽=2m, 单价=10 | 面积=2㎡, 总价=20 | P0 | ❌ 缺失 |
| PRICE-011 | 重量报价计算 | 重量=5kg, 单价=8 | 总价=40 | P0 | ❌ 缺失 |
| PRICE-012 | 附加费计算(按面积) | surcharge_method=per_sqm | 附加费 = 面积 × 单价 | P0 | ❌ 缺失 |
| PRICE-013 | 附加费计算(按件) | surcharge_method=per_piece | 附加费 = 数量 × 单价 | P1 | ❌ 缺失 |
| PRICE-014 | 附加费计算(按米) | surcharge_method=per_linear_m | 附加费 = 米数 × 单价 | P1 | ❌ 缺失 |
| PRICE-015 | 附加费计算(阈值) | surcharge_method=per_sqm_threshold | 超阈值部分计费 | P1 | ❌ 缺失 |
| PRICE-016 | 含税计算 | tax_inclusive=true | 价格已含税 | P0 | ❌ 缺失 |
| PRICE-017 | 不含税计算 | tax_inclusive=false, tax_rate=0.13 | 价格 + 13% 税 | P0 | ❌ 缺失 |
| PRICE-018 | 客户等级定价 | price_tier=tier1 | 使用 tier1 价格 | P1 | ❌ 缺失 |
| PRICE-019 | 条件公式计算 | 含 $input.xxx 的公式 | 公式正确求值 | P0 | ❌ 缺失 |
| PRICE-020 | 无定价规则的产品 | 无规则产品报价 | 返回错误或默认值 | P1 | ❌ 缺失 |
9.3 供应商成本
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| PRICE-030 | 创建供应商成本 | 有效数据 | 创建成功 | P1 | ❌ 缺失 |
| PRICE-031 | 查询供应商成本 | GET /supplier-costs?product_id= | 返回成本列表 | P1 | ❌ 缺失 |
| PRICE-032 | 更新供应商成本 | PUT /{id} | 更新成功 | P1 | ❌ 缺失 |
| PRICE-033 | 删除供应商成本 | DELETE /{id} | 软删除成功 | P1 | ❌ 缺失 |
9.4 价格等级
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| PRICE-040 | 创建价格等级 | 有效数据 | 创建成功 | P1 | ❌ 缺失 |
| PRICE-041 | 查询价格等级 | GET /price-tiers?product_id= | 返回等级列表 | P1 | ❌ 缺失 |
| PRICE-042 | 更新价格等级 | PUT /{id} | 更新成功 | P1 | ❌ 缺失 |
| PRICE-043 | 删除价格等级 | DELETE /{id} | 软删除成功 | P1 | ❌ 缺失 |
10. 模块八:物流与配送
10.1 物流任务管理 (管理员/经理)
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| TASK-001 | 创建物流任务 | 有效数据 | 任务创建, status=pending | P0 | ✅ test_create_task_success |
| TASK-001b | 无效订单创建任务 | 不存在的 order_id | 返回 400 | P0 | ✅ test_create_task_invalid_order |
| TASK-001c | 任务列表查询 | GET /api/logistics/tasks | 返回分页列表 | P1 | ❌ 缺失 |
| TASK-001d | 任务详情 | GET /api/logistics/tasks/{id} | 返回任务详情 | P1 | ❌ 缺失 |
| TASK-001e | 更新运单号 | PUT /{id}/tracking | tracking_number 更新 | P1 | ❌ 缺失 |
| TASK-001f | 取消物流任务 | POST /{id}/cancel | status → canceled | P1 | ❌ 缺失 |
10.2 司机任务操作
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| TASK-002 | 司机只能看自己的任务 | driver 查询 | 只返回自己的任务 | P0 | ✅ test_driver_only_see_own_tasks |
| TASK-003 | 司机详情无财务字段 | driver 查看详情 | 隐藏财务信息 | P0 | ✅ test_driver_task_detail_no_financial |
| TASK-004 | 接受任务 | POST /accept | status → accepted | P0 | ✅ test_accept_task_success |
| TASK-005 | 重复接单拒绝 | 对已接受任务再次 accept | 返回 400 | P0 | ✅ test_double_accept |
| TASK-006 | 提货 | POST /pickup | status → picked_up | P0 | ✅ test_pickup_success |
| TASK-007 | 无照片提货 | 无 photo | 返回 400 或允许 | P1 | ✅ test_pickup_without_photo |
| TASK-008 | 送达确认 | POST /deliver | status → delivered | P0 | ✅ test_deliver_success |
| TASK-009 | 非法状态操作 | pending 状态直接 deliver | 返回 400 | P0 | ✅ test_pickup_from_wrong_status / test_deliver_from_wrong_status |
| TASK-010 | 司机不能看他人任务 | driver 查看其他司机任务 | 返回 403 或空 | P0 | ✅ test_driver_cannot_see_other_tasks |
| TASK-011 | 提货撤回 | 提货后撤回 | status 回退 | P2 | ❌ 缺失 |
| TASK-012 | 完整任务流程 | pending→accepted→picked_up→delivered | 每步状态正确 | P0 | ✅ test_full_task_flow |
| TASK-012b | 任务状态同步订单 | 任务完成后订单状态更新 | 订单状态同步 | P0 | ✅ test_task_creation_updates_order |
10.3 运单管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| TASK-013 | OCR 识别运单号 | POST /recognize-waybill | 返回识别的运单号 | P1 | ❌ 缺失 |
| TASK-013b | 批量提交运单号 | POST /{id}/waybills | 批量创建运单记录 | P1 | ❌ 缺失 |
| TASK-013c | 查询运单列表 | GET /{id}/waybills | 返回运单列表 | P1 | ❌ 缺失 |
| TASK-013d | 删除运单 | DELETE /{id}/waybills/{wid} | 删除运单记录 | P1 | ❌ 缺失 |
10.4 物流轨迹
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| LOG-001 | 手动添加物流轨迹 | POST /{order_id}/trace | 轨迹记录创建 | P1 | ❌ 缺失 |
| LOG-002 | 查询物流轨迹 | GET /{order_id}/trace | 返回轨迹列表 | P1 | ❌ 缺失 |
| LOG-003 | 物流超时提醒 | 超过配置天数 | 生成超时提醒 | P1 | ❌ 缺失 |
| LOG-004 | 不重复生成超时提醒 | 已有提醒的物流 | 不重复创建 | P1 | ❌ 缺失 |
| LOG-005 | 快递100集成查询 | 查询第三方物流 | 返回轨迹节点 | P1 | ❌ 缺失 |
11. 模块九:AI 图像识别
11.1 OCR 识别
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AI-001 | 图片识别成功 | POST /ai/recognize | 返回识别结果 | P1 | ⚠️ 仅DB级别, 未调API |
| AI-002 | 识别失败处理 | 无效图片URL | 返回错误提示 | P1 | ❌ 缺失 |
| AI-005 | 低置信度识别 | 识别结果 confidence < 0.6 | 标记为低置信度 | P1 | ⚠️ 仅DB级别 |
11.2 人工校正
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AI-003 | 人工校正识别结果 | POST /{log_id}/correct | 更新识别结果 | P1 | ⚠️ 仅DB级别 |
| AI-004 | 确认识别结果入库 | 确认后创建订单 | 订单创建成功 | P1 | ❌ 缺失 |
11.3 文本解析
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AI-006 | 文本解析订单 | POST /ai/parse-order (text) | 返回解析结果 | P1 | ❌ 缺失 |
| AI-006b | 图片解析订单 | POST /ai/parse-order (image) | 返回解析结果 | P1 | ❌ 缺失 |
| AI-006c | 空文本解析 | text="" | 返回错误 | P1 | ❌ 缺失 |
11.4 权限
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AI-007 | 秘书可访问 AI | secretary 调用 | 返回 200 | P1 | ✅ test_secretary_can_access_ai |
| AI-007b | 业务员不能访问 AI 识别 | salesman 调用 /recognize | 返回 403 | P1 | ✅ test_salesman_cannot_access_ai |
| AI-007c | 业务员可调用文本解析 | salesman 调用 /parse-order | 返回 200 | P1 | ❌ 缺失 |
12. 模块十:文件管理
12.1 文件上传
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| FILE-001 | 获取上传凭证 | POST /upload-token | 返回 OSS 上传凭证 | P1 | ⚠️ 接受200或404 |
| FILE-002 | 上传图片 | 上传 jpg/png | 上传成功 | P1 | ⚠️ 接受200或404 |
| FILE-003 | 上传视频 | 上传 mp4 | 上传成功 | P1 | ⚠️ 接受200或404 |
| FILE-004 | 文件过大拒绝 | 上传 >10MB 文件 | 返回 400 | P1 | ❌ 缺失 |
| FILE-005 | OSS 服务异常 | 模拟 OSS 故障 | 返回 500 + 友好提示 | P2 | ❌ 缺失 |
12.2 文件关联
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| FILE-006 | 保存附件关联 | POST /attachments | biz_type + biz_id 关联成功 | P1 | ⚠️ 弱断言 |
| FILE-006b | 查询关联附件 | GET /attachments?biz_type=&biz_id= | 返回附件列表 | P1 | ❌ 缺失 |
| FILE-006c | 本地开发上传 | POST /local-upload | 文件保存到本地 | P1 | ❌ 缺失 |
12.3 权限
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| FILE-007 | 未认证不能上传 | 不带 token | 返回 401 | P1 | ✅ test_unauthenticated_upload |
13. 模块十一:提醒中心
13.1 欠款提醒
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ARR-001 | 发货模式生成欠款 | arrears_generate_mode=shipped | 发货后生成欠款记录 | P0 | ⚠️ 仅验证配置 |
| ARR-002 | 送达模式生成欠款 | arrears_generate_mode=delivered | 送达后生成欠款记录 | P0 | ⚠️ 仅验证配置 |
| ARR-003 | 未到节点不生成欠款 | 未发货/未送达 | 无欠款记录 | P1 | ❌ 缺失 |
| ARR-004 | 结算欠款 | settle arrears | 欠款状态更新 | P1 | ✅ test_settle_arrears |
| ARR-005 | 超期欠款提醒 | 欠款超过到期日 | 生成超期提醒 | P0 | ❌ 缺失 |
| ARR-009 | 欠款起算类型切换 | 切换 arrears_reminder_start_type | 新类型生效 | P1 | ❌ 缺失 |
13.2 沉默客户提醒
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ARR-006 | 沉默客户检测 | 超过 inactive_customer_days | 生成沉默客户提醒 | P1 | ⚠️ 仅配置检查 |
| ARR-007 | 阈值配置 | 设置 inactive_order_amount_threshold | 阈值生效 | P1 | ✅ test_inactive_customer_threshold |
| ARR-010 | 提醒指向业务员 | 检测到沉默客户 | 提醒发送给对应业务员 | P1 | ❌ 缺失 |
13.3 物流超时提醒
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| LOG-003 | 物流超时检测 | 超过 logistics_timeout_days | 生成超时提醒 | P1 | ❌ 缺失 |
13.4 提醒管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ARR-008 | 标记已读 | POST /{id}/read | is_read=true | P1 | ✅ test_mark_reminder_read |
| ARR-008b | 提醒列表查询 | GET /api/reminders | 分页列表 | P1 | ✅ test_reminder_list |
| ARR-008c | 提醒统计 | GET /api/reminders/dashboard | 返回统计摘要 | P1 | ❌ 缺失 |
| ARR-008d | 按类型筛选 | ?type=arrears | 只返回欠款提醒 | P1 | ❌ 缺失 |
| ARR-008e | 按状态筛选 | ?status=unread | 只返回未读提醒 | P1 | ❌ 缺失 |
13.5 手动触发检测
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ARR-011b | 触发全部检测 | POST /check-all | 执行所有检测 | P1 | ❌ 缺失 |
| ARR-011c | 触发欠款检测 | POST /arrears/check | 执行欠款检测 | P1 | ❌ 缺失 |
| ARR-011d | 触发沉默客户检测 | POST /inactive-customers/check | 执行检测 | P1 | ❌ 缺失 |
| ARR-011e | 触发物流超时检测 | POST /logistics-timeout/check | 执行检测 | P1 | ❌ 缺失 |
| ARR-011f | 业务员不能触发检测 | salesman 调用 check | 返回 403 | P1 | ❌ 缺失 |
13.6 微信推送
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ARR-011 | 微信订阅消息推送 | 订单状态变更 | 发送微信模板消息 | P2 | ❌ 缺失 |
| ARR-011g | 推送失败处理 | 微信API异常 | 记录错误, 不阻塞主流程 | P2 | ❌ 缺失 |
14. 模块十二:报表与统计
14.1 绩效报表
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| REP-001 | 月度报表查询 | stat_type=monthly | 返回月度统计 | P0 | ✅ test_monthly_report |
| REP-002 | 季度报表查询 | stat_type=quarterly | 返回季度统计 | P1 | ❌ 缺失 |
| REP-003 | 年度报表查询 | stat_type=yearly | 返回年度统计 | P1 | ❌ 缺失 |
| REP-004 | 按品类统计 | ?category_id= | 返回品类统计 | P1 | ✅ test_category_report |
| REP-004b | 按业务员筛选 | ?salesman_id= | 返回该业务员统计 | P1 | ❌ 缺失 |
| REP-004c | 排除电商订单 | ?exclude_ecommerce=true | 不含电商订单 | P1 | ❌ 缺失 |
| REP-004d | 默认统计类型 | 不传 stat_type | 返回默认类型 | P1 | ✅ test_default_stat_type |
14.2 报表导出
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| REP-007 | 导出 CSV | GET /export?format=csv | 返回 CSV 文件 | P1 | ✅ test_export_report |
| REP-007b | 导出 XLSX | GET /export?format=xlsx | 返回 XLSX 文件 | P1 | ❌ 缺失 |
| REP-008 | 报表金额校验 | 对比报表和原始数据 | 金额一致 | P1 | ❌ 缺失 |
14.3 报表审计
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| REP-009 | 报表审计查询 | GET /reports/audit | 返回审计数据 | P1 | ❌ 缺失 |
| REP-009b | 异常佣金检测 | 佣金率 >15% 或 <1% | 标记异常 | P1 | ❌ 缺失 |
14.4 业务员统计
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| REP-010 | 业务员仪表盘 | GET /salesman/dashboard | 返回统计摘要 | P1 | ❌ 缺失 |
| REP-010b | 日/周/月统计 | ?period=day/week/month | 返回对应周期统计 | P1 | ❌ 缺失 |
| REP-010c | TOP 客户排名 | 查询 top_customers | 返回排名列表 | P1 | ❌ 缺失 |
14.5 权限
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| REP-005 | 业务员不能查看报表 | salesman 调用 /reports/performance | 返回 403 | P0 | ✅ test_salesman_cannot_view_report |
| REP-006 | 司机不能查看报表 | driver 调用 | 返回 403 | P1 | ✅ test_driver_cannot_view_report |
| REP-006b | 经理可查看报表 | manager 调用 | 返回 200 | P1 | ✅ test_manager_can_view_report |
| REP-006c | 管理员可查看报表 | admin 调用 | 返回 200 | P1 | ✅ test_admin_can_view_report |
| REP-006d | 业务员不能导出报表 | salesman 调用 /export | 返回 403 | P1 | ✅ test_salesman_cannot_export_report |
15. 模块十三:系统管理
15.1 用户管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| SYS-001 | 创建用户 | 有效数据 | 创建成功 | P0 | ✅ test_create_user_success |
| SYS-002 | 用户名重复 | 重复 username | 返回 400 | P0 | ✅ test_duplicate_username |
| SYS-003 | 无效角色ID | role_id 不存在 | 返回 400 | P1 | ❌ 缺失 |
| SYS-004 | 禁用用户 | POST /status | enabled=false | P0 | ✅ test_disable_user |
| SYS-005 | 重置密码 | POST /reset-password | 密码重置成功 | P0 | ✅ test_reset_password |
| SYS-015 | 用户列表 | GET /system/users | 返回用户列表 | P1 | ✅ test_user_list |
| SYS-016 | 用户列表筛选 | ?name=&role=&status= | 筛选正确 | P1 | ❌ 缺失 |
| SYS-016b | 删除用户 | DELETE /{id} | 物理删除 | P1 | ❌ 缺失 |
| SYS-016c | 永久删除用户 | DELETE /{id}/permanent | 物理删除 | P1 | ❌ 缺失 |
| SYS-016d | 批量删除用户 | POST /batch-delete | 批量删除 | P1 | ❌ 缺失 |
| SYS-016e | 不能删除自己 | admin 删除自己 | 返回 400 | P1 | ❌ 缺失 |
15.2 角色管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| SYS-006 | 创建角色 | 有效数据 | 创建成功 | P1 | ✅ test_create_role_success |
| SYS-007 | 角色编码重复 | 重复 role_code | 返回 400 | P1 | ✅ test_duplicate_role_code |
| SYS-008 | 禁用有用户的角色 | 禁用有用户的角色 | 返回 400 或警告 | P1 | ❌ 缺失 |
| SYS-008b | 角色列表 | GET /system/roles | 返回角色列表 | P1 | ✅ test_role_list |
| SYS-008c | 删除角色 | DELETE /{id} | 物理删除 | P1 | ❌ 缺失 |
| SYS-008d | 永久删除角色 | DELETE /{id}/permanent | 物理删除 | P1 | ❌ 缺失 |
| SYS-008e | 批量删除角色 | POST /batch-delete | 批量删除 | P1 | ❌ 缺失 |
15.3 菜单管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| SYS-009 | 创建菜单 | 有效数据 | 创建成功 | P1 | ✅ test_create_menu_success |
| SYS-010 | 权限编码重复 | 重复 permission_code | 返回 400 | P1 | ✅ test_duplicate_permission_code |
| SYS-011 | 菜单父级设为自身 | parent_id = 自身 id | 返回 400 | P1 | ❌ 缺失 |
| SYS-011b | 菜单树查询 | GET /system/menus | 返回树形结构 | P1 | ✅ test_menu_tree |
| SYS-011c | 更新菜单 | PUT /{id} | 更新成功 | P1 | ❌ 缺失 |
15.4 角色-菜单授权
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| SYS-012 | 保存角色菜单 | PUT /{role_id}/menus | 关联成功 | P0 | ✅ test_save_role_menus |
| SYS-012b | 查询角色菜单 | GET /{role_id}/menus | 返回菜单列表 | P1 | ❌ 缺失 |
| SYS-012c | 角色菜单覆盖更新 | 重新分配菜单 | 旧关联删除, 新关联建立 | P1 | ❌ 缺失 |
15.5 权限边界
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| SYS-013 | 业务员不能访问系统管理 | salesman 调用 /api/system/* | 返回 403 | P0 | ✅ test_salesman_cannot_access_system |
| SYS-013b | 司机不能访问系统管理 | driver 调用 /api/system/* | 返回 403 | P0 | ✅ test_driver_cannot_access_system |
| SYS-013c | 经理不能管理用户 | manager 调用 /api/system/users | 返回 403 | P0 | ✅ test_manager_cannot_manage_users |
| SYS-013d | 管理员全权限 | admin 调用所有接口 | 全部 200 | P0 | ✅ test_admin_full_access |
| SYS-014 | 权限变更审计 | 修改角色权限 | 记录审计日志 | P1 | ❌ 缺失 |
16. 模块十四:系统配置
16.1 配置读写
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CFG-001 | 查询配置项 | GET /configs/{key} | 返回配置值 | P1 | ✅ test_query_config |
| CFG-002 | 更新配置项 | PUT /configs/{key} | 更新成功 | P1 | ✅ test_update_config |
| CFG-003 | 查询不存在的配置 | GET /不存在的key | 返回默认值或 404 | P1 | ✅ test_query_nonexistent_config |
| CFG-004 | 更新物流超时天数 | key=logistics_timeout_days | 更新成功 | P1 | ✅ test_update_logistics_timeout |
| CFG-005 | 更新沉默客户天数 | key=inactive_customer_days | 更新成功 | P1 | ✅ test_update_inactive_customer_days |
| CFG-006 | 更新金额阈值 | key=inactive_order_amount_threshold | 更新成功 | P1 | ✅ test_update_amount_threshold |
| CFG-007 | 配置即时生效 | 更新配置后不重启 | 新配置立即生效 | P1 | ❌ 缺失 |
16.2 安全问题
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| CFG-008 | 配置接口应有认证 | 不带 token 访问 | 应返回 401 (当前无认证) | P0 | ⚠️ 已跳过 - 安全缺口 |
| CFG-009 | 业务员不能修改配置 | salesman PUT | 应返回 403 (当前无认证) | P0 | ⚠️ 已跳过 - 安全缺口 |
17. 模块十五:审计日志
17.1 审计记录
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AUD-001 | 订单创建审计 | 创建订单 | 写入审计日志 | P0 | ⚠️ 断言被注释 |
| AUD-002 | 审批操作审计 | 审批订单 | 写入审计日志 | P0 | ⚠️ 断言被注释 |
| AUD-003 | 取消操作审计 | 取消订单 | 写入审计日志 | P0 | ⚠️ 断言被注释 |
| AUD-004 | 司机操作审计 | 接单/提货/送达 | 写入审计日志 | P1 | ❌ 缺失 |
| AUD-005 | OSS 上传审计 | 上传文件 | 写入审计日志 | P2 | ❌ 缺失 |
| AUD-006 | 配置变更审计 | 修改配置 | 写入审计日志 | P1 | ❌ 缺失 |
| AUD-007 | 审计日志前后值对比 | 查看审计详情 | before/after JSON 正确 | P1 | ❌ 缺失 |
17.2 审计查询
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AUD-008 | 审计日志列表 | GET /audit-logs | 返回分页列表 | P1 | ✅ test_audit_log_list |
| AUD-008b | 按操作类型筛选 | ?action=order.create | 筛选正确 | P1 | ✅ test_audit_log_filter |
| AUD-008c | 按时间范围筛选 | ?start_date=&end_date= | 筛选正确 | P1 | ❌ 缺失 |
| AUD-008d | 按操作人筛选 | ?user_id= | 筛选正确 | P1 | ❌ 缺失 |
17.3 安全问题
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| AUD-009 | 审计日志接口应有认证 | 不带 token 访问 | 应返回 401 (当前无认证) | P0 | ⚠️ 已跳过 - 安全缺口 |
| AUD-009b | 业务员不能查看审计 | salesman 调用 | 应返回 403 | P1 | ⚠️ 已跳过 |
18. 模块十六:WebSocket 实时推送
18.1 连接管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WS-001 | 建立 WebSocket 连接 | 带有效 token | 连接成功 | P1 | ❌ 缺失 |
| WS-002 | 无效 token 连接 | 带无效 token | 连接拒绝 | P1 | ❌ 缺失 |
| WS-003 | 连接状态查询 | GET /ws/status | 返回活跃连接列表 | P2 | ❌ 缺失 |
18.2 消息推送
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WS-004 | 新提醒推送 | 创建提醒 | WebSocket 收到推送 | P1 | ❌ 缺失 |
| WS-005 | 订单状态变更推送 | 订单审批通过 | 相关用户收到推送 | P1 | ❌ 缺失 |
| WS-006 | 多客户端接收 | 同一用户多窗口 | 所有窗口收到推送 | P2 | ❌ 缺失 |
19. 模块十七:微信小程序集成
19.1 登录
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WX-001 | 微信授权登录 | wx.login + 手机号 | 登录成功, 返回 token | P0 | ❌ 需手动测试 |
| WX-002 | 密码登录 | 用户名+密码 | 登录成功 | P0 | ❌ 需手动测试 |
| WX-003 | 登录态保持 | 重启小程序 | 自动登录 | P1 | ❌ 需手动测试 |
19.2 经理端
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WX-010 | 经理仪表盘 | 打开 dashboard | 显示统计数据 | P1 | ❌ 需手动测试 |
| WX-011 | 审批列表 | 打开 approve-list | 显示待审批列表 | P0 | ❌ 需手动测试 |
| WX-012 | 审批详情 | 打开 approve-detail | 显示订单详情+审批按钮 | P0 | ❌ 需手动测试 |
| WX-013 | 审批操作 | 点击通过/拒绝 | 操作成功 | P0 | ❌ 需手动测试 |
| WX-014 | 订单列表 | 打开 order-list | 显示订单列表 | P1 | ❌ 需手动测试 |
| WX-015 | 创建物流任务 | 打开 task-create | 创建任务成功 | P1 | ❌ 需手动测试 |
| WX-016 | 供应商文本 | 打开 supplier-text | 显示/生成文本 | P1 | ❌ 需手动测试 |
19.3 司机端
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WX-020 | 任务列表 | 打开 task-list | 显示我的任务 | P0 | ❌ 需手动测试 |
| WX-021 | 任务详情 | 打开 task-detail | 显示任务信息 | P0 | ❌ 需手动测试 |
| WX-022 | 接受任务 | 点击接单 | status → accepted | P0 | ❌ 需手动测试 |
| WX-023 | 提货 | 点击提货+拍照 | status → picked_up | P0 | ❌ 需手动测试 |
| WX-024 | 送达 | 点击送达 | status → delivered | P0 | ❌ 需手动测试 |
| WX-025 | 物流轨迹 | 查看 order-tracking | 显示轨迹信息 | P1 | ❌ 需手动测试 |
| WX-026 | 运单识别 | 拍照识别运单号 | OCR 返回运单号 | P1 | ❌ 需手动测试 |
19.4 通用
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WX-030 | 个人中心 | 打开 my | 显示用户信息 | P1 | ❌ 需手动测试 |
| WX-031 | 退出登录 | 点击退出 | 清除 token, 返回登录 | P1 | ❌ 需手动测试 |
| WX-032 | 订阅消息授权 | 首次操作时 | 弹出授权弹窗 | P1 | ❌ 需手动测试 |
| WX-033 | 角色 Tab 切换 | 经理/司机切换 | Tab 栏正确变化 | P1 | ❌ 需手动测试 |
20. 模块十八:Web Admin 前端
20.1 登录与导航
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-A-001 | 管理员登录 | 输入用户名密码 | 登录成功, 跳转 dashboard | P0 | ✅ admin-login.spec.js |
| WEB-A-002 | 密码错误 | 输入错误密码 | 显示错误提示 | P0 | ✅ admin-login.spec.js |
| WEB-A-003 | 退出登录 | 点击退出 | 清除 token, 跳转登录 | P0 | ✅ admin-login.spec.js |
| WEB-A-004 | 侧边栏导航 | 点击各菜单 | 正确跳转 | P1 | ❌ 缺失 |
| WEB-A-005 | 响应式侧边栏 | 窗口 <1200px | 侧边栏自动折叠 | P2 | ❌ 缺失 |
| WEB-A-006 | 通知铃铛 | 有新提醒 | 铃铛显示未读数 | P2 | ❌ 缺失 |
20.2 工作台
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-A-010 | 仪表盘数据加载 | 打开 dashboard | 显示统计卡片 | P1 | ❌ 缺失 |
| WEB-A-011 | 待审批数量 | 查看 dashboard | 数量正确 | P1 | ❌ 缺失 |
| WEB-A-012 | 最近审批列表 | 查看 dashboard | 列表正确 | P1 | ❌ 缺失 |
20.3 审批中心
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-A-020 | 审批列表加载 | 打开 approvals | 显示待审批列表 | P0 | ❌ 缺失 |
| WEB-A-021 | 审批筛选 | 按类型/订单号筛选 | 筛选正确 | P1 | ❌ 缺失 |
| WEB-A-022 | 审批详情 | 点击审批项 | 显示完整订单信息 | P0 | ❌ 缺失 |
| WEB-A-023 | 审批通过 | 点击通过 | 操作成功, 刷新列表 | P0 | ❌ 缺失 (Playwright) |
| WEB-A-024 | 审批拒绝 | 点击拒绝+填原因 | 操作成功 | P0 | ❌ 缺失 (Playwright) |
| WEB-A-025 | 利润明细展示 | 查看审批详情 | 显示利润计算 | P1 | ❌ 缺失 |
20.4 订单管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-A-030 | 订单列表 | 打开 orders | 显示订单列表 | P0 | ✅ admin-orders.spec.js |
| WEB-A-031 | 订单状态筛选 | 按状态筛选 | 筛选正确 | P1 | ✅ admin-orders.spec.js |
| WEB-A-032 | 订单详情 | 点击订单 | 显示详情弹窗 | P0 | ✅ admin-orders.spec.js |
| WEB-A-033 | 管理员创建订单 | 打开 order-create | 表单加载正常 | P1 | ❌ 缺失 |
| WEB-A-034 | 管理员代创建订单 | 选择业务员+填写表单 | 创建成功 | P1 | ❌ 缺失 |
| WEB-A-035 | AI 智能填充 | 粘贴订单文本 | 自动填充表单 | P2 | ❌ 缺失 |
| WEB-A-036 | 订单状态推进 | 推进到下一状态 | 状态更新成功 | P1 | ❌ 缺失 |
20.5 主数据管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-A-040 | 客户管理 Tab | 切换到客户 | 显示客户列表 | P1 | ❌ 缺失 |
| WEB-A-041 | 产品分类管理 | 切换到分类 | 显示分类列表 | P1 | ❌ 缺失 |
| WEB-A-042 | 产品管理 | 切换到产品 | 显示产品+规格 | P1 | ❌ 缺失 |
| WEB-A-043 | 供应商管理 | 切换到供应商 | 显示供应商列表 | P1 | ❌ 缺失 |
| WEB-A-044 | 批量导入客户 | 上传 Excel | 导入成功 | P1 | ❌ 缺失 |
20.6 定价规则
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-A-050 | 定价规则列表 | 打开 pricing-rules | 显示规则列表 | P1 | ❌ 缺失 |
| WEB-A-051 | 创建定价规则 | 填写表单 | 创建成功 | P1 | ❌ 缺失 |
| WEB-A-052 | 帮助文档 | 点击帮助按钮 | 显示字段说明 | P2 | ❌ 缺失 |
20.7 系统管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-A-060 | 用户管理 Tab | 切换到用户 | 显示用户列表 | P1 | ❌ 缺失 |
| WEB-A-061 | 角色管理 Tab | 切换到角色 | 显示角色列表 | P1 | ❌ 缺失 |
| WEB-A-062 | 菜单管理 Tab | 切换到菜单 | 显示菜单树 | P1 | ❌ 缺失 |
| WEB-A-063 | 角色菜单授权 | 选择角色+勾选菜单 | 保存成功 | P1 | ❌ 缺失 |
20.8 其他页面
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-A-070 | 配置管理页面 | 打开 config | 显示配置项 | P1 | ❌ 缺失 |
| WEB-A-071 | 审计日志页面 | 打开 audit | 显示日志列表 | P1 | ❌ 缺失 |
| WEB-A-072 | 提醒中心页面 | 打开 reminders | 显示提醒列表 | P1 | ❌ 缺失 |
| WEB-A-073 | 报表页面 | 打开 reports/performance | 显示报表 | P1 | ❌ 缺失 |
| WEB-A-074 | 报表导出 | 点击导出 | 下载文件 | P1 | ❌ 缺失 |
| WEB-A-075 | AI 识别页面 | 打开 ai-recognition | 页面加载正常 | P2 | ❌ 缺失 |
| WEB-A-076 | 司机任务页面 | 打开 driver/tasks | 显示任务列表 | P1 | ❌ 缺失 |
21. 模块十九:Web Sales 前端
21.1 登录与导航
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-S-001 | 业务员登录 | 输入用户名密码 | 登录成功, 跳转 dashboard | P0 | ❌ 缺失 (Playwright) |
| WEB-S-002 | Token 验证 | 无效 token | 跳转登录 | P0 | ❌ 缺失 |
| WEB-S-003 | 角色守卫 | 非 salesman 访问 | 跳转登录或 403 | P1 | ❌ 缺失 |
| WEB-S-004 | 移动端 Tab 栏 | 窗口 <768px | 显示底部 Tab 栏 | P2 | ❌ 缺失 |
21.2 工作台
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-S-010 | 仪表盘数据 | 打开 dashboard | 显示 6 个统计卡片 | P1 | ❌ 缺失 |
| WEB-S-011 | 最近订单列表 | 查看 dashboard | 显示最近 8 条订单 | P1 | ❌ 缺失 |
| WEB-S-012 | 待处理提醒 | 查看 dashboard | 显示待处理提醒 | P1 | ❌ 缺失 |
21.3 订单管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-S-020 | 创建订单页面 | 打开 orders/create | 表单加载正常 | P0 | ✅ sales-order-create.spec.js |
| WEB-S-021 | 填写订单信息 | 输入客户+产品 | 数据正确 | P0 | ✅ sales-order-create.spec.js |
| WEB-S-022 | 添加行项 | 添加产品行 | 行项正确 | P0 | ✅ sales-order-create.spec.js |
| WEB-S-023 | 提交订单 | 点击提交 | 提交成功 | P0 | ✅ sales-order-create.spec.js |
| WEB-S-024 | 利润计算 | 填写数据 | 利润自动计算 | P0 | ✅ sales-order-create.spec.js |
| WEB-S-025 | AI 文本解析 | 粘贴文本 | 自动填充 | P1 | ❌ 缺失 |
| WEB-S-026 | 订单列表 | 打开 orders | 显示订单列表 | P0 | ❌ 缺失 |
| WEB-S-027 | 订单筛选 | 按状态/客户筛选 | 筛选正确 | P1 | ❌ 缺失 |
| WEB-S-028 | 订单详情 | 点击订单 | 显示详情 | P0 | ❌ 缺失 |
| WEB-S-029 | 编辑订单 | 编辑草稿订单 | 编辑成功 | P1 | ❌ 缺失 |
| WEB-S-030 | 取消订单 | 取消+填原因 | 取消成功 | P1 | ❌ 缺失 |
| WEB-S-031 | 提交审批 | 提交草稿订单 | 提交成功 | P1 | ❌ 缺失 |
21.4 客户管理
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-S-040 | 客户列表 | 打开 customers | 显示客户列表 | P1 | ❌ 缺失 |
| WEB-S-041 | 创建客户 | 填写表单 | 创建成功 | P1 | ❌ 缺失 |
| WEB-S-042 | 客户搜索 | 输入姓名/手机 | 搜索正确 | P1 | ❌ 缺失 |
21.5 提醒与统计
| 用例编号 | 测试项 | 操作 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| WEB-S-050 | 提醒中心 | 打开 reminders | 显示提醒列表 | P1 | ❌ 缺失 |
| WEB-S-051 | 标记已读 | 点击标记 | 已读状态更新 | P1 | ❌ 缺失 |
| WEB-S-052 | 销售统计 | 打开 statistics | 显示统计图表 | P1 | ❌ 缺失 |
| WEB-S-053 | 周期切换 | 日/周/月切换 | 数据更新 | P1 | ❌ 缺失 |
| WEB-S-054 | TOP 客户排名 | 查看统计 | 显示排名表 | P2 | ❌ 缺失 |
22. 模块二十:跨模块端到端流程
22.1 完整订单生命周期
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| E2E-001 | 创建订单 | salesman 创建 | status=draft | P0 | ✅ test_full_order_lifecycle |
| E2E-002 | 提交审批 | salesman 提交 | status=pending_approve | P0 | ✅ |
| E2E-003 | 经理审批 | manager 通过 | status=approved | P0 | ✅ |
| E2E-004 | 生成供应商文本 | manager 生成+确认 | status=pending_factory | P0 | ✅ |
| E2E-005 | 创建物流任务 | manager 创建 | 任务 status=pending | P0 | ✅ |
| E2E-005b | 司机接单 | driver accept | 任务 status=accepted | P0 | ✅ |
| E2E-005c | 司机提货 | driver pickup | 任务 status=picked_up | P0 | ✅ |
| E2E-005d | 司机送达 | driver deliver | 任务 status=delivered | P0 | ✅ |
22.2 取消流程
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| E2E-008 | 草稿直接取消 | 创建→取消 | status=canceled | P0 | ✅ test_cancel_draft_e2e |
| E2E-009 | 审批后取消 | 创建→提交→审批→申请取消→批准 | status=canceled | P0 | ✅ test_cancel_approved_e2e |
| E2E-010 | 履行阶段取消 | 完整流程到 pending_factory→申请取消→批准 | status=canceled | P1 | ❌ 缺失 |
22.3 审批拒绝重提
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| E2E-011 | 拒绝后重新提交 | 创建→提交→拒绝→编辑→重新提交→审批通过 | 最终 approved | P0 | ✅ test_reject_and_resubmit |
22.4 欠款生成
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| E2E-006 | 送达后生成欠款 | 完整流程→送达→检查欠款 | 欠款记录生成 | P0 | ❌ 缺失 |
22.5 报表生成
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| E2E-007 | 报表查看和导出 | 完成订单→查看报表→导出 | 数据一致 | P1 | ❌ 缺失 |
22.6 提醒流程
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| E2E-012 | 提醒生命周期 | 生成→查看→标记已读 | 流程完整 | P1 | ✅ test_reminder_lifecycle |
22.7 跨角色数据隔离
| 用例编号 | 测试项 | 流程 | 预期结果 | 优先级 | 现有测试 |
|---|---|---|---|---|---|
| ISO-001 | 业务员订单隔离 | sales01 和 sales02 各创建订单 | 各自只能看自己的 | P0 | ❌ 缺失 (独立) |
| ISO-002 | 司机任务隔离 | driver01 和 driver02 各有任务 | 各自只能看自己的 | P0 | ❌ 缺失 (独立) |
| ISO-003 | 客户数据隔离 | 业务员创建客户 | 只有自己的可见 | P0 | ⚠️ 部分覆盖 |
| ISO-004 | 管理员看全部 | admin 查询各模块 | 可见所有数据 | P0 | ⚠️ 部分覆盖 |
| ISO-005 | 经理看全部 | manager 查询各模块 | 可见所有数据 | P1 | ❌ 缺失 (独立) |
23. 现有测试缺口汇总
23.1 关键缺口 (P0 级)
| 缺口 | 影响 | 建议 |
|---|---|---|
| 定价引擎无独立测试 | 核心业务逻辑未验证 | 新建 test_pricing.py, 覆盖所有定价计算场景 |
| 配置/审计接口无认证 | 安全漏洞 | 在 API 层添加认证中间件 |
| 审计日志断言被注释 | 无法验证审计功能 | 恢复断言, 确保审计日志写入 |
| 产品快照测试缺失 | 历史数据可能被篡改 | 新建快照不变性测试 |
| E2E-006 欠款生成 | 核心财务流程未覆盖 | 新建端到端欠款测试 |
| 弱断言测试 (~8个) | 测试形同虚设 | 修复所有 in (200, 404) 和注释断言 |
23.2 重要缺口 (P1 级)
| 缺口 | 影响 | 建议 |
|---|---|---|
| 客户批量导入 | 批量操作未测试 | 新建导入测试 |
| 物流轨迹全模块 | 5个用例完全缺失 | 新建 test_logistics_trace.py |
| 微信登录 | 小程序入口未测试 | 新建微信登录测试 (mock) |
| WebSocket 推送 | 实时功能未测试 | 新建 WebSocket 测试 |
| 报表季度/年度 | 统计维度不完整 | 扩展报表测试 |
| 前端 Playwright | 仅覆盖 12/37 页面 | 逐步补充前端 E2E |
23.3 一般缺口 (P2 级)
| 缺口 | 影响 | 建议 |
|---|---|---|
| 单元测试 | 测试金字塔倒置 | 补充 Service 层单元测试 |
| 并发测试 | 竞态条件风险 | 补充并发场景测试 |
| 性能测试 | 大数据量未验证 | 后续阶段补充 |
| 微信小程序端 | 无自动化测试 | 手动测试或小程序自动化框架 |
24. 测试执行优先级
第一阶段:修复现有测试 (1-2天)
- ✅ 恢复 test_audit.py 中被注释的断言
- ✅ 修复
in (200, 404)和in (200, 500)弱断言 - ✅ 确保所有现有测试通过
第二阶段:补充 P0 缺口 (3-5天)
- 🔧 新建 test_pricing.py — 定价引擎完整测试
- 🔧 修复配置/审计接口认证
- 🔧 新建产品快照不变性测试
- 🔧 新建欠款生成端到端测试
- 🔧 新建数据隔离专项测试
第三阶段:补充 P1 缺口 (5-7天)
- 🔧 新建客户批量导入测试
- 🔧 新建物流轨迹测试
- 🔧 新建微信登录测试 (mock)
- 🔧 新建 WebSocket 推送测试
- 🔧 补充报表季度/年度测试
- 🔧 补充触发检测接口测试
- 🔧 补充订单筛选/分页测试
第四阶段:前端 E2E 补充 (5-7天)
- 🔧 补充 Web Admin 核心页面 Playwright 测试
- 🔧 补充 Web Sales 核心页面 Playwright 测试
- 🔧 跨角色 E2E 流程测试
第五阶段:完善测试 (持续)
- 🔧 补充 Service 层单元测试
- 🔧 补充并发/边界场景
- 🔧 微信小程序手动测试清单
- 🔧 性能基准测试 (可选)
25. 验收标准
| 级别 | 标准 |
|---|---|
| P0 测试 | 100% 通过率, 0 个跳过 |
| P1 测试 | ≥95% 通过率 |
| P2 测试 | ≥80% 通过率 |
| 缺陷 | 0 个阻塞/严重缺陷, 重要缺陷 ≤3 个 |
| 覆盖率 | 后端 API 覆盖率 ≥85%, 核心模块 ≥95% |
| 弱断言 | 0 个 in (200, 404) 模式, 0 个注释断言 |
附录:测试用例统计
| 模块 | 现有测试 | 缺失测试 | 总计 |
|---|---|---|---|
| 认证与授权 | 18 | 12 | 30 |
| 订单生命周期 | 22 | 14 | 36 |
| 订单取消 | 12 | 1 | 13 |
| 客户管理 | 10 | 12 | 22 |
| 产品管理 | 10 | 6 | 16 |
| 供应商管理 | 7 | 5 | 12 |
| 定价引擎 | 0 | 24 | 24 |
| 物流配送 | 16 | 14 | 30 |
| AI 识别 | 6 | 7 | 13 |
| 文件管理 | 6 | 5 | 11 |
| 提醒中心 | 10 | 16 | 26 |
| 报表统计 | 8 | 12 | 20 |
| 系统管理 | 18 | 14 | 32 |
| 系统配置 | 10 | 2 | 12 |
| 审计日志 | 10 | 8 | 18 |
| WebSocket | 0 | 6 | 6 |
| 微信小程序 | 0 | 20 | 20 |
| Web Admin 前端 | 7 | 30 | 37 |
| Web Sales 前端 | 5 | 20 | 25 |
| 端到端流程 | 12 | 8 | 20 |
| 合计 | ~175 | ~236 | ~411 |