Files
ccdi/doc/test-scripts/README_TEST.md

8.8 KiB

导入重复检测测试使用说明

概述

本测试套件用于验证"导入文件内部主键重复检测"功能,确保系统能够正确识别并处理Excel文件内部重复的主键数据。

文件结构

doc/test-scripts/
├── test_import_duplicate_detection.py           # Python自动化测试脚本
├── test_import_duplicate_detection_cases.md     # 详细测试用例文档
└── README_TEST.md                               # 本说明文档

快速开始

1. 环境准备

必需组件

Python依赖安装

pip install requests openpyxl

或者使用requirements.txt(如果有的话):

pip install -r requirements.txt

2. 运行测试

方式1: 命令行运行

cd D:\ccdi\ccdi
python doc/test-scripts/test_import_duplicate_detection.py

方式2: IDE运行

  • 使用PyCharm/VS Code打开 test_import_duplicate_detection.py
  • 直接运行脚本

3. 查看结果

测试运行时会实时显示进度,完成后会生成JSON格式的测试报告:

doc/test-reports/test_report_20260209_153045.json

测试场景说明

场景1: 采购交易 - Excel内采购事项ID重复

  • 目的: 验证3条相同采购事项ID的记录,只有第1条导入成功
  • 预期: 成功1条,失败2条
  • 错误消息: "采购事项ID[xxx]在导入文件中重复,已跳过此条记录"

场景2: 员工信息 - Excel内柜员号重复

  • 目的: 验证3条相同柜员号的记录,只有第1条导入成功
  • 预期: 成功1条,失败2条
  • 错误消息: "柜员号[xxx]在导入文件中重复,已跳过此条记录"

场景3: 员工信息 - Excel内身份证号重复

  • 目的: 验证3条相同身份证号的记录,只有第1条导入成功
  • 预期: 成功1条,失败2条
  • 错误消息: "身份证号[xxx]在导入文件中重复,已跳过此条记录"

场景4: 混合重复(数据库+Excel)

  • 目的: 验证数据库已存在记录和Excel内重复的混合场景
  • 预期: 第1条失败(数据库重复),第2条成功,第3条失败(Excel内重复),第4条成功
  • 注意: 需要预先在数据库中插入测试数据

测试脚本说明

核心类

1. APIClient

API客户端封装,负责:

  • 登录获取Token
  • 上传文件
  • 查询导入状态
  • 查询失败记录

2. ExcelGenerator

Excel测试数据生成器,提供:

  • create_purchase_duplicate_data(): 采购重复数据
  • create_employee_employee_id_duplicate(): 员工柜员号重复数据
  • create_employee_id_card_duplicate(): 员工身份证号重复数据
  • create_mixed_duplicate_scenario(): 混合重复数据

3. TestCase

测试用例基类,所有测试用例继承此类:

  • PurchaseDuplicateTestCase: 场景1
  • EmployeeEmployeeIdDuplicateTestCase: 场景2
  • EmployeeIdCardDuplicateTestCase: 场景3
  • MixedDuplicateTestCase: 场景4

4. TestRunner

测试运行器,负责:

  • 初始化API客户端
  • 依次执行所有测试用例
  • 收集测试结果
  • 生成测试报告

配置参数

在脚本顶部的配置部分可以修改:

# 服务器地址
BASE_URL = "http://localhost:8080"

# 测试账号
USERNAME = "admin"
PASSWORD = "admin123"

# 报告保存目录
REPORT_DIR = "D:/ccdi/ccdi/doc/test-reports"
EXCEL_DIR = "D:/ccdi/ccdi/doc/test-data/temp"

测试数据说明

自动生成的Excel文件

测试脚本会自动在 doc/test-data/temp/ 目录下生成测试数据:

  1. purchase_duplicate.xlsx - 采购重复数据(场景1)
  2. employee_employee_id_duplicate.xlsx - 员工柜员号重复(场景2)
  3. employee_id_card_duplicate.xlsx - 员工身份证号重复(场景3)
  4. purchase_mixed_duplicate.xlsx - 采购混合重复(场景4)
  5. employee_mixed_duplicate.xlsx - 员工混合重复(场景4)

数据字段说明

采购交易测试数据

字段 说明 示例
purchaseId 采购事项ID(主键) PURCHASE001
purchaseCategory 采购类别 采购类别1
subjectName 标的物名称 标的物名称1
purchaseQty 采购数量 10
budgetAmount 预算金额 10000.00
purchaseMethod 采购方式 公开招标
applyDate 采购申请日期 2024-01-01
applicantId 申请人工号 1000001
applicantName 申请人姓名 张三
applyDepartment 申请部门 技术部

员工信息测试数据

字段 说明 示例
name 姓名 员工1
employeeId 柜员号(主键) 10001
deptId 所属部门ID 103
idCard 身份证号(主键) 110101199001011234
phone 电话 13800000000
hireDate 入职时间 2024-01-01
status 状态 0

测试报告说明

报告格式

JSON格式,包含以下信息:

{
  "test_time": "2026-02-09 15:30:45",
  "environment": "http://localhost:8080",
  "total_count": 4,
  "passed_count": 3,
  "failed_count": 1,
  "pass_rate": "75.0%",
  "results": [
    {
      "name": "采购交易 - Excel内采购事项ID重复",
      "description": "测试导入3条采购事项ID相同的记录...",
      "passed": true,
      "error_message": null,
      "details": {
        "expected_success": 1,
        "expected_failure": 2,
        "actual_success": 1,
        "actual_failure": 2,
        "failures": [...]
      },
      "duration": "5.23s"
    }
  ]
}

查看报告

  1. 打开测试报告JSON文件
  2. 查看每个测试用例的passed字段
  3. 检查details中的实际结果与预期结果是否一致
  4. 如果失败,查看error_message了解原因

常见问题

1. 连接失败

问题: ✗ 登录失败: Connection refused

解决:

  • 确认后端服务是否启动
  • 检查BASE_URL配置是否正确
  • 确认端口8080未被占用

2. 登录失败

问题: ✗ 登录失败: 用户名或密码错误

解决:

  • 确认测试账号密码是否正确(admin/admin123)
  • 检查数据库中是否存在该账号
  • 确认登录接口路径是否为/login/test

3. 导入超时

问题: 查询导入状态时超时

解决:

  • 增加等待时间(修改脚本中的time.sleep(3)为更大的值)
  • 检查后端异步任务是否正常执行
  • 查看后端日志是否有异常

4. 权限不足

问题: ✗ 上传失败: 没有权限

解决:

  • 确认admin账号是否有导入权限
  • 检查权限标识: ccdi:purchaseTransaction:importccdi:employee:import
  • 在系统管理->角色管理中配置权限

5. 场景4测试失败

问题: 混合重复测试结果不符合预期

解决:

  • 场景4需要预先在数据库中插入测试数据(EXIST001, 柜员号99999)
  • 如果数据库中没有这些数据,测试可能部分失败
  • 可以手动在数据库中插入,或者跳过该场景

手动测试步骤

如果需要手动验证测试场景:

1. 准备测试数据

运行Python脚本生成Excel文件(即使不执行测试,也会生成数据):

from doc.test_scripts.test_import_duplicate_detection import ExcelGenerator
import os

# 生成场景1数据
file1 = ExcelGenerator.create_purchase_duplicate_data()
print(f"文件已生成: {file1}")

2. 通过前端界面导入

  1. 访问 http://localhost:8080
  2. 登录系统(admin/admin123)
  3. 进入"采购交易管理"或"员工信息管理"
  4. 点击"导入"按钮
  5. 选择生成的Excel文件
  6. 点击"确定"上传
  7. 等待导入完成
  8. 点击"查看失败记录"查看详细信息

3. 验证结果

  • 检查导入成功的记录数量
  • 查看失败记录的错误消息
  • 确认数据库中只有第1条重复记录被导入

清理测试数据

测试完成后,建议清理测试数据:

方式1: 通过前端界面

  1. 进入采购交易/员工信息管理页面
  2. 搜索测试数据(如采购事项ID为PURCHASE001的记录)
  3. 逐条删除

方式2: 直接操作数据库

-- 删除采购交易测试数据
DELETE FROM ccdi_purchase_transaction WHERE purchase_id LIKE 'PURCHASE%' OR purchase_id LIKE 'NEW%';

-- 删除员工测试数据
DELETE FROM ccdi_employee WHERE employee_id BETWEEN 10001 AND 99999;

扩展测试

如需添加新的测试场景:

  1. 在ExcelGenerator中添加新的数据生成方法
  2. 创建新的TestCase子类
  3. 在main()函数中将新测试用例添加到TestRunner

示例:

class MyNewTestCase(TestCase):
    def __init__(self):
        super().__init__("我的新测试", "测试描述")

    def run(self, client: APIClient):
        # 实现测试逻辑
        pass

# 在main函数中添加
runner.add_test_case(MyNewTestCase())

联系支持

如有问题,请联系开发团队或查看相关文档:

  • 测试用例详细文档: test_import_duplicate_detection_cases.md
  • 后端实现代码: CcdiPurchaseTransactionImportServiceImpl.java, CcdiEmployeeImportServiceImpl.java
  • API文档: Swagger UI (http://localhost:8080/swagger-ui/index.html)