Files
ccdi/doc/test-data/test-scripts/test_import_duplicate_detection_cases.md
2026-02-09 14:28:25 +08:00

8.7 KiB

导入文件内部主键重复检测功能测试用例

测试目的

验证导入功能能够正确检测并处理Excel文件内部的主键重复数据,确保:

  1. 同一Excel文件内重复的主键只会导入第一条,后续重复记录会被跳过
  2. 提供清晰的错误提示信息
  3. 正确区分数据库重复和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      竞争性谈判 王五

测试步骤:

  1. 生成包含3条采购事项ID相同的Excel文件
  2. 调用采购交易导入接口上传文件
  3. 等待3秒让异步任务完成
  4. 查询导入状态
  5. 查询导入失败记录

预期结果:

  • 导入状态: 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

测试步骤:

  1. 生成包含3条柜员号相同的Excel文件
  2. 调用员工信息导入接口上传文件
  3. 等待3秒让异步任务完成
  4. 查询导入状态
  5. 查询导入失败记录

预期结果:

  • 导入状态: 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

测试步骤:

  1. 生成包含3条身份证号相同的Excel文件
  2. 调用员工信息导入接口上传文件
  3. 等待3秒让异步任务完成
  4. 查询导入状态
  5. 查询导入失败记录

预期结果:

  • 导入状态: 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 的员工记录

测试步骤:

  1. 生成测试数据Excel文件
  2. 分别调用采购交易和员工信息导入接口
  3. 等待3秒让异步任务完成
  4. 查询导入状态
  5. 查询导入失败记录

预期结果:

采购交易

  • 导入状态: 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:importccdi:employee:import
  • 测试账号: admin / admin123

测试执行

自动化测试

使用Python测试脚本:

python doc/test-scripts/test_import_duplicate_detection.py

手动测试

  1. 登录系统: http://localhost:8080/login
  2. 进入采购交易/员工信息管理页面
  3. 点击"导入"按钮
  4. 选择测试Excel文件
  5. 上传并查看导入结果
  6. 点击"查看失败记录"查看详细错误信息

测试报告

测试报告将保存在: doc/test-reports/test_report_YYYYMMDD_HHMMSS.json

报告包含:

  • 测试时间
  • 测试环境
  • 总测试用例数
  • 通过/失败数量
  • 通过率
  • 详细测试结果(包括输入数据、预期结果、实际结果)

相关代码

后端实现

  • 采购交易导入: CcdiPurchaseTransactionImportServiceImpl.java
  • 员工信息导入: CcdiEmployeeImportServiceImpl.java

Controller接口

  • 采购交易: CcdiPurchaseTransactionController.java
  • 员工信息: CcdiEmployeeController.java

Excel实体

  • 采购交易: CcdiPurchaseTransactionExcel.java
  • 员工信息: CcdiEmployeeExcel.java