问题: - 导入成功条数显示为负数 - 原因:成功数量计算使用 validRecords.size() - failures.size() - 但没有使用实际的数据库操作返回值 修复: - saveBatchWithUpsert 和 saveBatch 方法现在返回 int - 累加实际的数据库影响行数 - 使用 actualSuccessCount 变量跟踪真实成功数量 影响范围: - CcdiIntermediaryPersonImportServiceImpl - CcdiIntermediaryEntityImportServiceImpl
10 KiB
10 KiB
中介库导入失败记录查看功能 - 测试清单
测试环境
- 前端: Vue 2.6.12 + Element UI
- 后端: Spring Boot 3.5.8
- 测试数据目录:
doc/test-data/purchase_transaction/
测试前准备
1. 准备测试数据
准备包含错误数据的Excel文件,用于测试导入失败场景:
个人中介测试数据应包含的错误类型:
- 缺少必填字段(姓名、证件号)
- 证件号格式错误
- 手机号格式错误
- 重复数据(唯一键冲突)
实体中介测试数据应包含的错误类型:
- 缺少必填字段(机构名称、统一社会信用代码)
- 统一社会信用代码格式错误
- 重复数据(唯一键冲突)
2. 清理环境
打开浏览器开发者工具 → Application → Local Storage,清除以下key:
intermediary_person_import_last_taskintermediary_entity_import_last_task
功能测试清单
测试1: 个人中介导入失败记录查看
步骤
- 访问中介库管理页面
- 点击"导入"按钮
- 选择"个人中介"导入类型
- 上传包含错误数据的个人中介Excel文件
- 等待导入完成(观察通知消息)
- 验证"查看个人导入失败记录"按钮是否显示
- 点击按钮查看失败记录
预期结果
- ✅ 导入完成后显示通知:"成功X条,失败Y条"
- ✅ 工具栏显示"查看个人导入失败记录"按钮(黄色警告样式)
- ✅ 按钮tooltip显示上次导入时间
- ✅ 点击按钮打开对话框
- ✅ 对话框标题:"个人中介导入失败记录"
- ✅ 顶部显示统计信息:"导入时间: XXX | 总数: X条 | 成功: X条 | 失败: X条"
- ✅ 表格显示失败记录,包含以下列:
- 姓名
- 证件号码
- 人员类型
- 性别
- 手机号码
- 所在公司
- 失败原因(最小宽度200px,溢出显示tooltip)
- ✅ 如果失败记录超过10条,分页组件正常显示
测试2: 实体中介导入失败记录查看
步骤
- 访问中介库管理页面
- 点击"导入"按钮
- 选择"实体中介"导入类型
- 上传包含错误数据的实体中介Excel文件
- 等待导入完成(观察通知消息)
- 验证"查看实体导入失败记录"按钮是否显示
- 点击按钮查看失败记录
预期结果
- ✅ 导入完成后显示通知:"成功X条,失败Y条"
- ✅ 工具栏显示"查看实体导入失败记录"按钮(黄色警告样式)
- ✅ 按钮tooltip显示上次导入时间
- ✅ 点击按钮打开对话框
- ✅ 对话框标题:"实体中介导入失败记录"
- ✅ 顶部显示统计信息:"导入时间: XXX | 总数: X条 | 成功: X条 | 失败: X条"
- ✅ 表格显示失败记录,包含以下列:
- 机构名称
- 统一社会信用代码
- 主体类型
- 企业性质
- 法定代表人
- 成立日期(格式: YYYY-MM-DD)
- 失败原因(最小宽度200px,溢出显示tooltip)
- ✅ 如果失败记录超过10条,分页组件正常显示
测试3: localStorage持久化
步骤
- 执行个人中介导入,包含失败记录
- 观察按钮显示
- 刷新页面(F5)
- 观察"查看个人导入失败记录"按钮是否仍然显示
- 点击按钮验证能否正常查看失败记录
预期结果
- ✅ 刷新页面后按钮仍然显示
- ✅ 点击按钮能正常查看失败记录
- ✅ localStorage中存在
intermediary_person_import_last_task或intermediary_entity_import_last_task
测试4: 分页功能
步骤
- 准备至少20条失败记录的数据
- 导入并等待完成
- 打开失败记录对话框
- 测试翻页功能
预期结果
- ✅ 分页组件显示正确的总记录数
- ✅ 每页显示10条记录
- ✅ 点击下一页/上一页按钮正常切换
- ✅ 修改每页显示数量正常工作
测试5: 清除历史记录
步骤
- 打开失败记录对话框
- 点击"清除历史记录"按钮
- 确认清除操作
- 关闭对话框
- 观察工具栏按钮是否隐藏
- 检查localStorage是否已清除
预期结果
- ✅ 弹出确认对话框:"确认清除上次导入记录?"
- ✅ 确认后显示成功提示:"已清除"
- ✅ 对话框关闭
- ✅ 工具栏对应的"查看失败记录"按钮隐藏
- ✅ localStorage中的对应key已删除
测试6: 记录过期处理
方法1: 手动修改localStorage模拟过期
- 打开开发者工具 → Application → Local Storage
- 找到
intermediary_person_import_last_task或intermediary_entity_import_last_task - 修改
saveTime为8天前的时间戳 - 刷新页面
- 观察按钮是否隐藏
方法2: 等待后端记录过期
- 导入数据并等待失败记录显示
- 等待后端清理过期记录(根据后端配置的过期时间)
- 点击"查看失败记录"按钮
- 观察错误提示
预期结果
- ✅ 方法1: 刷新后按钮自动隐藏
- ✅ 方法2: 显示提示"导入记录已过期,无法查看失败记录"
- ✅ 方法2: localStorage自动清除
- ✅ 方法2: 按钮自动隐藏
测试7: 两种类型导入互不影响
步骤
- 先导入个人中介(有失败记录)
- 再导入实体中介(有失败记录)
- 验证两个按钮是否同时显示
- 分别点击两个按钮,验证显示的失败记录是否正确
预期结果
- ✅ 两个按钮同时显示
- ✅ "查看个人导入失败记录"按钮显示个人中介的失败记录
- ✅ "查看实体导入失败记录"按钮显示实体中介的失败记录
- ✅ 两个localStorage存储独立,互不影响
测试8: 导入成功场景
步骤
- 准备完全正确的Excel文件(所有数据都符合要求)
- 导入数据
- 等待导入完成
预期结果
- ✅ 显示成功通知:"全部成功!共导入X条数据"
- ✅ 不显示"查看失败记录"按钮
- ✅ localStorage中不存储该任务(或hasFailures为false)
测试9: 网络错误处理
步骤
- 导入数据(有失败记录)
- 打开失败记录对话框
- 断开网络或使用浏览器开发者工具模拟离线
- 尝试翻页或重新加载失败记录
预期结果
- ✅ 显示友好的错误提示:"网络连接失败,请检查网络"
- ✅ 不影响页面其他功能的正常使用
测试10: 服务器错误处理
步骤
- 导入数据(有失败记录)
- 使用浏览器开发者工具模拟服务器错误(500)
- 尝试加载失败记录
预期结果
- ✅ 显示错误提示:"服务器错误,请稍后重试"
边界情况测试
测试11: 大数据量性能测试
步骤
- 准备1000条数据,其中100条失败
- 导入并等待完成
- 打开失败记录对话框
- 测试翻页性能
预期结果
- ✅ 导入在合理时间内完成(参考员工模块:1000条约1-2分钟)
- ✅ 查询失败记录响应时间 < 2秒
- ✅ 翻页流畅,无卡顿
测试12: 并发导入
步骤
- 快速连续执行两次个人中介导入
- 观察localStorage中的数据
- 观察按钮显示状态
预期结果
- ✅ 只有最近一次导入的数据被保存
- ✅ 按钮显示状态基于最新的导入结果
浏览器兼容性测试
测试13: 不同浏览器测试
在以下浏览器中重复执行测试1和测试2:
- ✅ Chrome (推荐)
- ✅ Firefox
- ✅ Edge
- ✅ Safari (Mac)
回归测试
测试14: 原有功能不受影响
验证以下原有功能仍正常工作:
- ✅ 新增中介(个人/实体)
- ✅ 编辑中介(个人/实体)
- ✅ 查看详情
- ✅ 删除中介
- ✅ 搜索功能
- ✅ 导入成功场景
- ✅ 导入模板下载
性能测试
测试15: 内存泄漏检查
- 打开浏览器开发者工具 → Performance
- 开始录制
- 执行多次导入和查看失败记录操作
- 停止录制
- 检查内存使用情况
预期结果
- ✅ 内存使用稳定,无明显泄漏
- ✅ 定时器在组件销毁时正确清理
自动化测试脚本(可选)
测试16: API接口测试
使用Postman或curl测试以下接口:
# 1. 测试个人中介导入失败记录查询
curl -X GET "http://localhost:8080/ccdi/intermediary/importPersonFailures/{taskId}?pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
# 2. 测试实体中介导入失败记录查询
curl -X GET "http://localhost:8080/ccdi/intermediary/importEntityFailures/{taskId}?pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
# 3. 测试过期记录查询(应返回404)
curl -X GET "http://localhost:8080/ccdi/intermediary/importPersonFailures/expired-task-id?pageNum=1&pageSize=10" \
-H "Authorization: Bearer {token}"
测试结果记录表
| 测试项 | 测试结果 | 问题描述 | 解决方案 | 验证日期 |
|---|---|---|---|---|
| 测试1: 个人中介导入失败记录查看 | ⬜ 通过 / ⬜ 失败 | |||
| 测试2: 实体中介导入失败记录查看 | ⬜ 通过 / ⬜ 失败 | |||
| 测试3: localStorage持久化 | ⬜ 通过 / ⬜ 失败 | |||
| 测试4: 分页功能 | ⬜ 通过 / ⬜ 失败 | |||
| 测试5: 清除历史记录 | ⬜ 通过 / ⬜ 失败 | |||
| 测试6: 记录过期处理 | ⬜ 通过 / ⬜ 失败 | |||
| 测试7: 两种类型导入互不影响 | ⬜ 通过 / ⬜ 失败 | |||
| 测试8: 导入成功场景 | ⬜ 通过 / ⬜ 失败 | |||
| 测试9: 网络错误处理 | ⬜ 通过 / ⬜ 失败 | |||
| 测试10: 服务器错误处理 | ⬜ 通过 / ⬜ 失败 | |||
| 测试11: 大数据量性能测试 | ⬜ 通过 / ⬜ 失败 | |||
| 测试12: 并发导入 | ⬜ 通过 / ⬜ 失败 | |||
| 测试13: 浏览器兼容性 | ⬜ 通过 / ⬜ 失败 | |||
| 测试14: 原有功能不受影响 | ⬜ 通过 / ⬜ 失败 | |||
| 测试15: 内存泄漏检查 | ⬜ 通过 / ⬜ 失败 |
已知问题
记录测试过程中发现的已知问题:
| 问题编号 | 问题描述 | 严重程度 | 状态 | 解决方案 |
|---|---|---|---|---|
测试总结
通过率统计
- 总测试项: 15项
- 通过: X项
- 失败: Y项
- 通过率: X%
测试结论
- ⬜ 测试通过,可以发布
- ⬜ 存在问题,需要修复后再测试
测试签名
- 测试人员: ___________
- 测试日期: ___________
- 审核人员: ___________
- 审核日期: ___________