9.5 KiB
9.5 KiB
个人理财系统 - 测试用例
本文档定义个人理财系统的测试用例,覆盖前后端各类型接口
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 |
返回200,success: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