Files
gerenjizhang/TEST_CASES.md

9.5 KiB
Raw Permalink Blame History

个人理财系统 - 测试用例

本文档定义个人理财系统的测试用例,覆盖前后端各类型接口


1. 用户接口测试 (/api/users)

编号 测试用例 请求方式 测试数据 预期结果
USR-001 创建用户-正常 POST {name: "张三", email: "zhangsan@example.com"} 创建成功,返回用户ID
USR-002 创建用户-缺少name POST {email: "test@example.com"} 返回400,提示name为必填
USR-003 创建用户-缺少email POST {name: "李四"} 返回400,提示email为必填
USR-004 创建用户-邮箱重复 POST {name: "王五", email: "test@example.com"} 返回400,提示邮箱已被注册
USR-005 获取用户列表 GET 返回所有用户数组

2. 账户接口测试 (/api/accounts)

编号 测试用例 请求方式 测试数据 预期结果
ACC-001 创建账户-正常 POST {userId:1, name:"支付宝", type:"payment", balance:1000} 创建成功,返回账户ID
ACC-002 创建账户-缺少userId POST {name:"微信", type:"payment"} 返回400,提示userId为必填
ACC-003 创建账户-缺少必填字段 POST {userId:1, name:"微信"} 返回400,提示type为必填
ACC-004 创建账户-默认余额 POST {userId:1, name:"现金", type:"cash"} 余额默认为0
ACC-005 获取账户列表 GET ?userId=1 返回该用户所有账户
ACC-006 获取单个账户 GET /api/accounts/1 返回账户详情
ACC-007 获取不存在的账户 GET /api/accounts/999 返回404,账户不存在
ACC-008 更新账户 PUT /api/accounts/1 + {name:"支付宝(已更新)", balance:2000} 更新成功
ACC-009 删除账户 DELETE /api/accounts/1 删除成功

3. 交易记录接口测试 (/api/records)

编号 测试用例 请求方式 测试数据 预期结果
REC-001 创建收入记录-正常 POST {userId:1, accountId:1, type:"income", amount:5000, category:"工资", description:"月薪"} 创建成功,账户余额增加
REC-002 创建支出记录-正常 POST {userId:1, accountId:1, type:"expense", amount:100, category:"餐饮", description:"午饭"} 创建成功,账户余额减少
REC-003 创建记录-缺少必填字段 POST {userId:1, amount:100} 返回400,提示必填字段缺失
REC-004 创建记录-金额为0 POST {userId:1, accountId:1, type:"expense", amount:0, category:"餐饮"} 返回400,金额必须大于0
REC-005 创建记录-金额为负 POST {userId:1, accountId:1, type:"expense", amount:-100, category:"餐饮"} 返回400,金额必须大于0
REC-006 创建记录-日期格式YYYY-MM-DD POST {userId:1, accountId:1, type:"income", amount:100, category:"奖金", date:"2026-04-25"} 日期按本地时区正确解析
REC-007 创建记录-日期包含时间 POST {userId:1, accountId:1, type:"income", amount:100, category:"奖金", date:"2026-04-25T10:30:00"} 日期正确解析
REC-008 获取记录列表-按用户 GET ?userId=1 返回该用户所有记录,按时间倒序
REC-009 获取记录列表-按账户 GET ?userId=1&accountId=1 返回该账户所有记录
REC-010 获取记录列表-按类型 GET ?userId=1&type=expense 返回所有支出记录
REC-011 获取记录列表-按分类 GET ?userId=1&category=餐饮 返回餐饮分类记录
REC-012 获取记录列表-日期范围 GET ?userId=1&startDate=2026-04-01&endDate=2026-04-30 返回日期范围内的记录
REC-013 更新记录-修改金额 PUT /api/records/1 + {amount:200} 记录更新,余额正确调整
REC-014 更新记录-修改类型 PUT /api/records/1 + {type:"expense"} 类型更新,余额正确调整
REC-015 删除记录 DELETE /api/records/1 删除成功,账户余额恢复
REC-016 删除不存在的记录 DELETE /api/records/999 返回404

4. 预算接口测试 (/api/budgets)

编号 测试用例 请求方式 测试数据 预期结果
BUD-001 创建预算-正常 POST {userId:1, category:"餐饮", amount:1500, month:"2026-04"} 创建成功,返回预算ID
BUD-002 创建预算-缺少必填字段 POST {userId:1, category:"餐饮"} 返回400,提示必填字段缺失
BUD-003 创建预算-缺少月份 POST {userId:1, category:"餐饮", amount:1000} 返回400,提示month为必填
BUD-004 创建预算-同分类同月份 POST {userId:1, category:"餐饮", amount:2000, month:"2026-04"} 可创建(未做唯一约束)
BUD-005 获取预算列表-按用户 GET ?userId=1 返回该用户所有预算
BUD-006 获取预算列表-按月份 GET ?userId=1&month=2026-04 返回该月份预算
BUD-007 获取单个预算 GET /api/budgets/1 返回预算详情
BUD-008 更新预算 PUT /api/budgets/1 + {amount:2000} 更新成功
BUD-009 删除预算 DELETE /api/budgets/1 删除成功

5. 统计接口测试 (/api/statistics)

编号 测试用例 请求方式 测试数据 预期结果
STA-001 月度统计-正常 GET ?userId=1&month=2026-04 返回totalIncome、totalExpense、categoryStats
STA-002 月度统计-缺少userId GET ?month=2026-04 返回400,提示userId为必填
STA-003 月度统计-缺少month GET ?userId=1 返回400,提示month为必填
STA-004 月度统计-无数据月份 GET ?userId=1&month=2025-01 返回0统计
STA-005 月度统计-支出分类聚合 GET ?userId=1&month=2026-04 categoryStats正确聚合各分类支出
STA-006 趋势统计-正常 GET ?userId=1 返回按日期聚合的每日收支数组
STA-007 趋势统计-按日期范围 GET ?userId=1&startDate=2026-04-01&endDate=2026-04-30 返回日期范围内的趋势
STA-008 趋势统计-缺少userId GET 无userId参数 返回400

6. 仪表盘接口测试 (/api/dashboard)

编号 测试用例 请求方式 测试数据 预期结果
DASH-001 仪表盘汇总-正常 GET ?userId=1 返回totalBalance、monthIncome、monthExpense、budgetUsage
DASH-002 仪表盘汇总-缺少userId GET 无userId 返回400
DASH-003 仪表盘汇总-无账户用户 GET ?userId=999 返回空账户、零值统计
DASH-004 仪表盘汇总-预算使用率 GET ?userId=1 budgetUsage包含percentage字段
DASH-005 仪表盘汇总-跨月份计算 GET ?userId=1 仅计算当月数据

7. 健康检查与系统接口

编号 测试用例 请求方式 测试数据 预期结果
SYS-001 健康检查 GET /health 返回200success:true
SYS-002 API信息 GET /api 返回版本号信息
SYS-003 初始化测试数据-首次 GET /api/init-test-data 创建完整的测试数据
SYS-004 初始化测试数据-已有数据 GET /api/init-test-data 返回已有数据提示,无需重复初始化

8. 边界值与异常测试

编号 测试用例 请求方式 测试数据 预期结果
EDGE-001 账户余额-超大金额 POST {userId:1, accountId:1, type:"income", amount:999999999, category:"工资"} 支持大金额
EDGE-002 记录描述-特殊字符 POST {userId:1, accountId:1, type:"expense", amount:10, category:"餐饮", description:"咖啡&蛋糕"} 正确保存
EDGE-003 记录描述-中文 POST {userId:1, accountId:1, type:"expense", amount:50, category:"餐饮", description:"重庆小面"} 正确保存中文
EDGE-004 日期边界-月初 POST {..., date:"2026-04-01"} 正确解析
EDGE-005 日期边界-月末 POST {..., date:"2026-04-30"} 正确解析
EDGE-006 并发创建记录 POST x10 相同账户连续创建10笔 余额正确累加/扣除
EDGE-007 账户余额-精度 POST {userId:1, accountId:1, type:"income", amount:0.01, category:"其他"} 支持分精度

9. 前后端集成测试

编号 测试场景 测试步骤 预期结果
INT-001 创建账单完整流程 1.创建账户 → 2.创建收入 → 3.创建支出 → 4.查看仪表盘 仪表盘数据与操作一致
INT-002 更新后数据一致性 1.创建记录 → 2.更新金额 → 3.检查账户余额 余额正确反映更新
INT-003 删除后数据一致性 1.创建记录 → 2.删除记录 → 3.检查账户余额 余额恢复到原始值
INT-004 预算超额提醒 1.创建预算100 → 2.创建支出200 → 3.查看仪表盘budgetUsage percentage显示100以上
INT-005 统计准确性 1.创建多种类型记录 → 2.查看月度统计 → 3.验证分类聚合 统计结果与实际一致

10. 自动化测试命令

# 启动后端服务
cd personal-finance-budget-system/backend
npm run dev

# 运行 API 测试
node test-api.js

# 运行单元测试(需配置)
npm test

文档版本: v1.0.0 更新日期: 2026-04-26