8.7 KiB
8.7 KiB
导入文件内部主键重复检测功能测试用例
测试目的
验证导入功能能够正确检测并处理Excel文件内部的主键重复数据,确保:
- 同一Excel文件内重复的主键只会导入第一条,后续重复记录会被跳过
- 提供清晰的错误提示信息
- 正确区分数据库重复和Excel内重复
测试范围
1. 采购交易导入
- 主键字段: purchaseId (采购事项ID)
- 接口: POST /ccdi/purchaseTransaction/importData
- 状态查询: GET /ccdi/purchaseTransaction/importStatus/{taskId}
- 失败记录: GET /ccdi/purchaseTransaction/importFailures/{taskId}
2. 员工信息导入
- 主键字段:
- employeeId (柜员号)
- idCard (身份证号)
- 接口: POST /ccdi/employee/importData
- 状态查询: GET /ccdi/employee/importStatus/{taskId}
- 失败记录: GET /ccdi/employee/importFailures/{taskId}
测试场景
场景1: Excel内采购事项ID重复
测试用例ID: TEST-PURCHASE-001
测试目的: 验证采购交易导入时Excel内采购事项ID重复的检测
测试数据:
采购事项ID 采购类别 标的物名称 采购数量 预算金额 采购方式 申请人
PURCHASE001 类别1 标的物1 10 10000 公开招标 张三
PURCHASE001 类别2 标的物2 20 20000 邀请招标 李四
PURCHASE001 类别3 标的物3 30 30000 竞争性谈判 王五
测试步骤:
- 生成包含3条采购事项ID相同的Excel文件
- 调用采购交易导入接口上传文件
- 等待3秒让异步任务完成
- 查询导入状态
- 查询导入失败记录
预期结果:
- 导入状态: PARTIAL_SUCCESS (部分成功)
- 成功数量: 1 (第1条)
- 失败数量: 2 (第2、3条)
- 失败记录:
- 第1条失败记录: 错误消息包含 "采购事项ID[PURCHASE001]在导入文件中重复,已跳过此条记录"
- 第2条失败记录: 错误消息包含 "采购事项ID[PURCHASE001]在导入文件中重复,已跳过此条记录"
实际结果: (待测试)
测试结论: (待测试)
场景2: Excel内员工柜员号重复
测试用例ID: TEST-EMPLOYEE-001
测试目的: 验证员工信息导入时Excel内柜员号重复的检测
测试数据:
姓名 柜员号 所属部门ID 身份证号 电话 入职时间 状态
员工1 10001 103 110101199001011234 13800000000 2024-01-01 0
员工2 10001 103 110101199001011235 13800000001 2024-01-01 0
员工3 10001 103 110101199001011236 13800000002 2024-01-01 0
测试步骤:
- 生成包含3条柜员号相同的Excel文件
- 调用员工信息导入接口上传文件
- 等待3秒让异步任务完成
- 查询导入状态
- 查询导入失败记录
预期结果:
- 导入状态: PARTIAL_SUCCESS (部分成功)
- 成功数量: 1 (第1条)
- 失败数量: 2 (第2、3条)
- 失败记录:
- 第1条失败记录: 错误消息包含 "柜员号[10001]在导入文件中重复,已跳过此条记录"
- 第2条失败记录: 错误消息包含 "柜员号[10001]在导入文件中重复,已跳过此条记录"
实际结果: (待测试)
测试结论: (待测试)
场景3: Excel内员工身份证号重复
测试用例ID: TEST-EMPLOYEE-002
测试目的: 验证员工信息导入时Excel内身份证号重复的检测
测试数据:
姓名 柜员号 所属部门ID 身份证号 电话 入职时间 状态
员工1 10001 103 110101199001011234 13800000000 2024-01-01 0
员工2 10002 103 110101199001011234 13800000001 2024-01-01 0
员工3 10003 103 110101199001011234 13800000002 2024-01-01 0
测试步骤:
- 生成包含3条身份证号相同的Excel文件
- 调用员工信息导入接口上传文件
- 等待3秒让异步任务完成
- 查询导入状态
- 查询导入失败记录
预期结果:
- 导入状态: PARTIAL_SUCCESS (部分成功)
- 成功数量: 1 (第1条)
- 失败数量: 2 (第2、3条)
- 失败记录:
- 第1条失败记录: 错误消息包含 "身份证号[110101199001011234]在导入文件中重复,已跳过此条记录"
- 第2条失败记录: 错误消息包含 "身份证号[110101199001011234]在导入文件中重复,已跳过此条记录"
实际结果: (待测试)
测试结论: (待测试)
场景4: 混合重复(数据库+Excel)
测试用例ID: TEST-MIXED-001
测试目的: 验证数据库已存在记录和Excel内重复记录的混合场景
测试数据:
采购交易
采购事项ID 采购类别 标的物名称 采购数量 预算金额 采购方式 申请人
EXIST001 类别1 标的物1 10 10000 公开招标 张三 (数据库已存在)
NEW001 类别2 标的物2 20 20000 邀请招标 李四 (全新数据)
NEW001 类别3 标的物3 30 30000 竞争性谈判 王五 (Excel内与第2条重复)
NEW002 类别4 标的物4 40 40000 单一来源 赵六 (全新数据)
员工信息
姓名 柜员号 所属部门ID 身份证号 电话 入职时间 状态
已存在员工 99999 103 110101199001019999 13900000000 2024-01-01 0 (数据库已存在)
新员工1 90001 103 110101199001011111 13800000001 2024-01-01 0 (全新数据)
新员工2 90001 103 110101199001012222 13800000002 2024-01-01 0 (Excel内与第2条重复)
新员工3 90002 103 110101199001013333 13800000003 2024-01-01 0 (全新数据)
前置条件:
- 数据库中已存在采购事项ID为 EXIST001 的记录
- 数据库中已存在柜员号为 99999 的员工记录
测试步骤:
- 生成测试数据Excel文件
- 分别调用采购交易和员工信息导入接口
- 等待3秒让异步任务完成
- 查询导入状态
- 查询导入失败记录
预期结果:
采购交易
- 导入状态: PARTIAL_SUCCESS
- 成功数量: 2 (NEW001, NEW002)
- 失败数量: 2
- 失败记录:
- 第1条: 错误消息包含 "采购事项ID[EXIST001]已存在,请勿重复导入"
- 第2条: 错误消息包含 "采购事项ID[NEW001]在导入文件中重复,已跳过此条记录"
员工信息
- 导入状态: PARTIAL_SUCCESS
- 成功数量: 2 (90001, 90002)
- 失败数量: 2
- 失败记录:
- 第1条: 错误消息包含 "柜员号已存在且未启用更新支持" 或 "该柜员号已存在"
- 第2条: 错误消息包含 "柜员号[90001]在导入文件中重复,已跳过此条记录"
实际结果: (待测试)
测试结论: (待测试)
测试注意事项
1. 异步处理
- 导入功能采用异步处理,需要等待一段时间(建议3-5秒)后再查询状态
- 导入状态可能经历 PROCESSING -> SUCCESS/PARTIAL_SUCCESS 的变化
2. 错误消息格式
- 数据库重复: "采购事项ID[xxx]已存在,请勿重复导入"
- Excel内重复: "采购事项ID[xxx]在导入文件中重复,已跳过此条记录"
- 员工柜员号重复: "柜员号[xxx]在导入文件中重复,已跳过此条记录"
- 员工身份证号重复: "身份证号[xxx]在导入文件中重复,已跳过此条记录"
3. 数据准备
- 场景4需要提前在数据库中插入测试数据
- 如果数据库中不存在预置数据,该场景可能不会完全按预期执行
4. 清理工作
- 测试完成后需要清理测试数据,避免影响后续测试
- 可以通过删除接口或直接清理数据库
5. 权限要求
- 需要登录并有导入权限:
ccdi:purchaseTransaction:import和ccdi:employee:import - 测试账号: admin / admin123
测试执行
自动化测试
使用Python测试脚本:
python doc/test-scripts/test_import_duplicate_detection.py
手动测试
- 登录系统: http://localhost:8080/login
- 进入采购交易/员工信息管理页面
- 点击"导入"按钮
- 选择测试Excel文件
- 上传并查看导入结果
- 点击"查看失败记录"查看详细错误信息
测试报告
测试报告将保存在: doc/test-reports/test_report_YYYYMMDD_HHMMSS.json
报告包含:
- 测试时间
- 测试环境
- 总测试用例数
- 通过/失败数量
- 通过率
- 详细测试结果(包括输入数据、预期结果、实际结果)
相关代码
后端实现
- 采购交易导入:
CcdiPurchaseTransactionImportServiceImpl.java - 员工信息导入:
CcdiEmployeeImportServiceImpl.java
Controller接口
- 采购交易:
CcdiPurchaseTransactionController.java - 员工信息:
CcdiEmployeeController.java
Excel实体
- 采购交易:
CcdiPurchaseTransactionExcel.java - 员工信息:
CcdiEmployeeExcel.java