8.8 KiB
8.8 KiB
导入重复检测测试使用说明
概述
本测试套件用于验证"导入文件内部主键重复检测"功能,确保系统能够正确识别并处理Excel文件内部重复的主键数据。
文件结构
doc/test-scripts/
├── test_import_duplicate_detection.py # Python自动化测试脚本
├── test_import_duplicate_detection_cases.md # 详细测试用例文档
└── README_TEST.md # 本说明文档
快速开始
1. 环境准备
必需组件
- Python 3.7+
- 后端服务运行在 http://localhost:8080
- 测试账号: admin / admin123
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: 场景1EmployeeEmployeeIdDuplicateTestCase: 场景2EmployeeIdCardDuplicateTestCase: 场景3MixedDuplicateTestCase: 场景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/ 目录下生成测试数据:
purchase_duplicate.xlsx- 采购重复数据(场景1)employee_employee_id_duplicate.xlsx- 员工柜员号重复(场景2)employee_id_card_duplicate.xlsx- 员工身份证号重复(场景3)purchase_mixed_duplicate.xlsx- 采购混合重复(场景4)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"
}
]
}
查看报告
- 打开测试报告JSON文件
- 查看每个测试用例的passed字段
- 检查details中的实际结果与预期结果是否一致
- 如果失败,查看error_message了解原因
常见问题
1. 连接失败
问题: ✗ 登录失败: Connection refused
解决:
- 确认后端服务是否启动
- 检查BASE_URL配置是否正确
- 确认端口8080未被占用
2. 登录失败
问题: ✗ 登录失败: 用户名或密码错误
解决:
- 确认测试账号密码是否正确(admin/admin123)
- 检查数据库中是否存在该账号
- 确认登录接口路径是否为/login/test
3. 导入超时
问题: 查询导入状态时超时
解决:
- 增加等待时间(修改脚本中的time.sleep(3)为更大的值)
- 检查后端异步任务是否正常执行
- 查看后端日志是否有异常
4. 权限不足
问题: ✗ 上传失败: 没有权限
解决:
- 确认admin账号是否有导入权限
- 检查权限标识:
ccdi:purchaseTransaction:import和ccdi: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. 通过前端界面导入
- 访问 http://localhost:8080
- 登录系统(admin/admin123)
- 进入"采购交易管理"或"员工信息管理"
- 点击"导入"按钮
- 选择生成的Excel文件
- 点击"确定"上传
- 等待导入完成
- 点击"查看失败记录"查看详细信息
3. 验证结果
- 检查导入成功的记录数量
- 查看失败记录的错误消息
- 确认数据库中只有第1条重复记录被导入
清理测试数据
测试完成后,建议清理测试数据:
方式1: 通过前端界面
- 进入采购交易/员工信息管理页面
- 搜索测试数据(如采购事项ID为PURCHASE001的记录)
- 逐条删除
方式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;
扩展测试
如需添加新的测试场景:
- 在ExcelGenerator中添加新的数据生成方法
- 创建新的TestCase子类
- 在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)