399 lines
13 KiB
Markdown
399 lines
13 KiB
Markdown
# 物料库位功能调整测试报告
|
||
|
||
## 一、测试概述
|
||
|
||
测试日期:2026-06-29
|
||
|
||
测试范围:
|
||
|
||
- 物料新增/编辑移除库位设置。
|
||
- 物料标准库位维护页面移除编辑能力。
|
||
- 入库时库位选择逻辑调整为:有库存库位优先显示已有库存库位,无库存库位时显示全库位。
|
||
- 数据库脚本可发布性核对。
|
||
- 前端构建验证。
|
||
|
||
测试环境:
|
||
|
||
- 工作目录:`D:\景耀\JY1.0`
|
||
- 前端技术栈:Vue 2.5.17、Element UI 2.13、Webpack 4
|
||
- 数据库服务器:`192.168.1.27`
|
||
- 数据库:`ERPTOOL_JY_20250826Back`
|
||
|
||
本次测试未直接执行数据库 ALTER 脚本,仅做只读核对。
|
||
|
||
## 二、测试对象
|
||
|
||
### 2.1 前端文件
|
||
|
||
- `src/views/TechnologyCenter/MaterialMaintain/index.vue`
|
||
- `src/views/TechnologyCenter/MaterialQuery/index.vue`
|
||
- `src/views/WarehouseManagement/MaterialLocation/index.vue`
|
||
- `src/views/WarehouseManagement/PurchasePartsStorage/index.vue`
|
||
|
||
### 2.2 SQL 文件
|
||
|
||
- `sql/移除物料标准库位维护.sql`
|
||
|
||
### 2.3 文档文件
|
||
|
||
- `docs/物料库位功能调整设计方案.md`
|
||
- `docs/物料库位功能调整测试报告.md`
|
||
|
||
## 三、测试用例与结果
|
||
|
||
### 3.1 静态残留检查:物料维护与物料库位页面
|
||
|
||
测试目的:
|
||
|
||
确认物料新增/编辑页面不再残留库位表单、库位必填校验、默认库位、物料库位编辑调用。
|
||
|
||
执行命令:
|
||
|
||
```powershell
|
||
rg -n "form\.库位|库位: \[|inventoryLocation|getInventoryLocation|= 2514|货位流水号', this\.form\.库位|仓储管理_物料库位_编辑数据|@row-dblclick=\"changeState\"|changeState\(|confirmEdit\(|cancelEdit\(|submitLocation\(|addLocation\(" src/views/TechnologyCenter/MaterialMaintain/index.vue src/views/TechnologyCenter/MaterialQuery/index.vue src/views/WarehouseManagement/MaterialLocation/index.vue
|
||
```
|
||
|
||
测试结果:
|
||
|
||
- 命令退出码:`1`
|
||
- 输出:无匹配结果
|
||
|
||
结果说明:
|
||
|
||
`rg` 在无匹配时返回退出码 `1`,本测试场景表示未发现目标残留代码。检查通过。
|
||
|
||
结论:
|
||
|
||
通过。
|
||
|
||
### 3.2 静态逻辑检查:入库库位选择
|
||
|
||
测试目的:
|
||
|
||
确认入库页面包含以下关键逻辑:
|
||
|
||
- 页面创建时加载全库位。
|
||
- 调用 `仓储管理_库存盘点_查询` 查询已有库存库位。
|
||
- 已有库存库位显示库存数量。
|
||
- 无库存库位 fallback 到全库位。
|
||
- 入库提交仍传递 `货位流水号组`。
|
||
|
||
执行命令:
|
||
|
||
```powershell
|
||
rg -n "getLocateName\(|locateSource|locateName\.slice|库存:|仓储管理_库存盘点_查询|仓储管理_库位_查询|货位流水号组" src/views/WarehouseManagement/PurchasePartsStorage/index.vue
|
||
```
|
||
|
||
测试结果摘要:
|
||
|
||
```text
|
||
760: this.getLocateName()
|
||
1048: getLocateName() {
|
||
1050: var Data = this.CreateData('11', '仓储管理_库位_查询', param)
|
||
1133: var Data = this.CreateData('11', '仓储管理_库存盘点_查询', param)
|
||
1141: label: data[i].货位名称 + '(库存:' + inventory + ')',
|
||
1149: this.$set(row, 'locateSource', 'inventory')
|
||
1152: this.$set(row, 'locateName', this.locateName.slice())
|
||
1153: this.$set(row, 'locateSource', 'all')
|
||
1156: this.getLocateName().then(setAllLocate)
|
||
1299: param[5] = ['货位流水号组', locateGroup]
|
||
1436: param[4] = ['货位流水号组', locateGroup]
|
||
```
|
||
|
||
结果说明:
|
||
|
||
关键代码路径均存在:
|
||
|
||
- `created()` 中加载全库位。
|
||
- `getLocateName()` 使用 `仓储管理_库位_查询`。
|
||
- `getInventoryLocateName(row)` 使用 `仓储管理_库存盘点_查询`。
|
||
- 有库存库位时设置 `locateSource = 'inventory'`。
|
||
- 无库存库位时使用 `this.locateName.slice()` 设置全库位,并设置 `locateSource = 'all'`。
|
||
- 采购入库、自制件入库提交仍使用 `货位流水号组`。
|
||
|
||
结论:
|
||
|
||
通过。
|
||
|
||
### 3.3 SQL 脚本静态检查
|
||
|
||
测试目的:
|
||
|
||
确认 SQL 脚本包含目标存储过程,并保留 `@货位流水号` 兼容参数。
|
||
|
||
执行命令:
|
||
|
||
```powershell
|
||
rg -n "ALTER PROCEDURE|库存管理_物料与货位对照表|货位流水号|货位流水号 = @货位流水号|货位流水号=@货位流水号" sql/移除物料标准库位维护.sql
|
||
```
|
||
|
||
测试结果摘要:
|
||
|
||
```text
|
||
8: 3. 保留 @货位流水号 参数,兼容未同步发布的旧前端调用。
|
||
11:ALTER PROCEDURE [dbo].[物料管理_增加]
|
||
13: @货位流水号 int = null,
|
||
41:ALTER PROCEDURE [dbo].[物料管理_增加新]
|
||
43: @货位流水号 int = null,
|
||
105:ALTER PROCEDURE [dbo].[物料管理_编辑]
|
||
107: @货位流水号 int = null,
|
||
```
|
||
|
||
结果说明:
|
||
|
||
- 脚本包含 `物料管理_增加`、`物料管理_增加新`、`物料管理_编辑`。
|
||
- 脚本保留 `@货位流水号` 参数。
|
||
- 未检出 `货位流水号=@货位流水号` 或 `货位流水号 = @货位流水号` 写入语句。
|
||
- 未检出对 `库存管理_物料与货位对照表` 的新增/更新语句。
|
||
|
||
结论:
|
||
|
||
通过。
|
||
|
||
### 3.4 数据库对象参数核对
|
||
|
||
测试目的:
|
||
|
||
确认目标数据库中相关存储过程和参数存在,为脚本发布与接口兼容提供依据。
|
||
|
||
执行命令:
|
||
|
||
```powershell
|
||
sqlcmd -S 192.168.1.27 -d ERPTOOL_JY_20250826Back -U sa -P ****** -C -Q "SET NOCOUNT ON; SELECT o.name AS ObjectName, p.name AS ParamName, TYPE_NAME(p.user_type_id) AS TypeName, p.parameter_id FROM sys.objects o LEFT JOIN sys.parameters p ON o.object_id=p.object_id WHERE o.name IN (N'物料管理_增加',N'物料管理_增加新',N'物料管理_编辑',N'仓储管理_物料库位_编辑数据',N'仓储管理_库存盘点_查询',N'仓储管理_库位_查询') ORDER BY o.name,p.parameter_id;"
|
||
```
|
||
|
||
测试结果摘要:
|
||
|
||
- `仓储管理_库存盘点_查询` 存在,参数包含:
|
||
- `@物料名称_check`
|
||
- `@物料名称`
|
||
- `@图号或型号_check`
|
||
- `@图号或型号`
|
||
- `@库位_check`
|
||
- `@库位`
|
||
- `@排序名称`
|
||
- `@排序方式`
|
||
- `@物料编码_check`
|
||
- `@物料编码`
|
||
- `仓储管理_库位_查询` 存在,参数包含:
|
||
- `@库位_check`
|
||
- `@库位`
|
||
- `物料管理_增加` 存在,参数包含 `@货位流水号`。
|
||
- `物料管理_增加新` 存在,参数包含 `@货位流水号`。
|
||
- `物料管理_编辑` 存在,参数包含 `@货位流水号`。
|
||
- `仓储管理_物料库位_编辑数据` 存在,参数包含 `@物料流水号`、`@货位流水号`。
|
||
|
||
结果说明:
|
||
|
||
数据库对象与前端调用所需过程匹配。`物料管理_增加/增加新/编辑` 仍保留 `@货位流水号` 参数,因此前端传 `货位流水号 = null` 可以作为兼容占位。
|
||
|
||
结论:
|
||
|
||
通过。
|
||
|
||
### 3.5 数据库当前过程行为核对
|
||
|
||
测试目的:
|
||
|
||
确认目标数据库当前是否已经执行过本次 SQL 调整脚本。
|
||
|
||
执行命令:
|
||
|
||
```powershell
|
||
sqlcmd -S 192.168.1.27 -d ERPTOOL_JY_20250826Back -U sa -P ****** -C -Q "SET NOCOUNT ON; SELECT o.name AS ObjectName, CASE WHEN m.definition LIKE N'%库存管理_物料与货位对照表%' THEN 1 ELSE 0 END AS TouchMaterialLocationTable, CASE WHEN m.definition LIKE N'%货位流水号=@货位流水号%' OR m.definition LIKE N'%货位流水号 = @货位流水号%' THEN 1 ELSE 0 END AS WritesLocationSerial FROM sys.objects o JOIN sys.sql_modules m ON o.object_id=m.object_id WHERE o.name IN (N'物料管理_增加',N'物料管理_增加新',N'物料管理_编辑',N'仓储管理_物料库位_编辑数据');"
|
||
```
|
||
|
||
测试结果:
|
||
|
||
```text
|
||
ObjectName TouchMaterialLocationTable WritesLocationSerial
|
||
仓储管理_物料库位_编辑数据 1 1
|
||
物料管理_编辑 1 1
|
||
物料管理_增加 1 0
|
||
物料管理_增加新 1 0
|
||
```
|
||
|
||
结果说明:
|
||
|
||
目标数据库当前仍是旧过程行为:
|
||
|
||
- `物料管理_增加`、`物料管理_增加新` 仍接触 `库存管理_物料与货位对照表`。
|
||
- `物料管理_编辑` 仍写入 `货位流水号`。
|
||
- `仓储管理_物料库位_编辑数据` 仍写入物料库位。
|
||
|
||
这说明 `sql/移除物料标准库位维护.sql` 尚未执行到目标数据库。
|
||
|
||
结论:
|
||
|
||
部分通过。数据库对象存在,但后端脚本尚未发布。上线前必须执行 SQL 脚本。
|
||
|
||
### 3.6 库位基础数据与库存库位样本核对
|
||
|
||
测试目的:
|
||
|
||
确认全库位查询、已有库存库位查询存在可用样本数据。
|
||
|
||
执行命令:
|
||
|
||
```powershell
|
||
sqlcmd -S 192.168.1.27 -d ERPTOOL_JY_20250826Back -U sa -P ****** -C -Q "SET NOCOUNT ON; SELECT TOP 10 货位流水号,货位名称 FROM 库存管理_货位主文件 ORDER BY 货位流水号; SELECT TOP 10 物料名称,图号或型号,货位名称,库存,货位流水号 FROM 外购件库存_视图 WHERE ISNULL(库存,0)>0 ORDER BY 物料名称;"
|
||
```
|
||
|
||
测试结果摘要:
|
||
|
||
全库位样本:
|
||
|
||
```text
|
||
货位流水号 货位名称
|
||
1 A1
|
||
2 A1-1
|
||
3 A1-2
|
||
4 A1-3
|
||
5 A1-4
|
||
6 A1-5
|
||
7 A1-6
|
||
8 A1-7
|
||
9 A1-8
|
||
10 A1-9
|
||
```
|
||
|
||
已有库存库位样本:
|
||
|
||
```text
|
||
物料名称 图号或型号 货位名称 库存 货位流水号
|
||
壳体I模具 XT50-2-07.01MJ 模具库 1.0 2588
|
||
盔甲护罩(左) WRS5085L 07-12-03 1.0 3789
|
||
垃圾袋 垃圾袋 A000 1.0 2514
|
||
内六角圆柱头螺钉 M10x45 GB/T70.1-2008 A000 1184.0 2514
|
||
```
|
||
|
||
结果说明:
|
||
|
||
- 全库位基础数据存在。
|
||
- 真实库存库位样本存在。
|
||
- 可用于后续页面业务回归测试。
|
||
|
||
结论:
|
||
|
||
通过。
|
||
|
||
### 3.7 前端生产构建测试
|
||
|
||
测试目的:
|
||
|
||
确认本次前端修改没有引入 Vue/JavaScript 编译错误。
|
||
|
||
执行命令:
|
||
|
||
```powershell
|
||
npm run build
|
||
```
|
||
|
||
测试结果摘要:
|
||
|
||
```text
|
||
Hash: bfc0aa9b97bada6643bc
|
||
Version: webpack 4.16.5
|
||
Time: 64306ms
|
||
Built at: 2026/06/29 14:57:00
|
||
Build complete.
|
||
```
|
||
|
||
构建告警摘要:
|
||
|
||
- asset size limit 超限。
|
||
- entrypoint size limit 超限。
|
||
- Browserslist/caniuse-lite 过期提示。
|
||
- npm 日志无法写入用户 npm-cache 日志目录。
|
||
- shelljs 循环依赖属性访问告警。
|
||
|
||
异常说明:
|
||
|
||
构建已输出 `Build complete`,产物已生成;但命令进程在构建完成后未及时退出,被工具在 180 秒时截断,退出码为 `124`。
|
||
|
||
判断:
|
||
|
||
- 编译结果:通过。
|
||
- 命令退出:异常,疑似项目旧构建脚本或环境中残留进程导致。
|
||
- 告警均为项目既有构建告警或环境日志权限告警,本次未发现由修改代码造成的编译错误。
|
||
|
||
结论:
|
||
|
||
条件通过。
|
||
|
||
## 四、功能测试结论
|
||
|
||
| 测试项 | 结果 | 说明 |
|
||
| --- | --- | --- |
|
||
| 物料新增/编辑库位 UI 移除 | 通过 | 静态检查无残留 |
|
||
| 物料库位维护编辑能力移除 | 通过 | 静态检查无残留 |
|
||
| 入库库存库位优先逻辑 | 通过 | 关键代码路径存在 |
|
||
| 入库无库存 fallback 全库位 | 通过 | 关键代码路径存在 |
|
||
| SQL 脚本静态检查 | 通过 | 脚本未写标准库位 |
|
||
| 数据库对象参数核对 | 通过 | 所需过程和参数存在 |
|
||
| 目标数据库后端脚本发布状态 | 未完成 | 当前库仍为旧过程 |
|
||
| 前端生产构建 | 条件通过 | 已 Build complete,但进程超时退出 |
|
||
|
||
## 五、待办与风险
|
||
|
||
### 5.1 必须执行的上线前动作
|
||
|
||
1. 在目标数据库执行:
|
||
|
||
```text
|
||
sql/移除物料标准库位维护.sql
|
||
```
|
||
|
||
2. 执行后重新核对:
|
||
|
||
```sql
|
||
SELECT o.name,
|
||
CASE WHEN m.definition LIKE N'%库存管理_物料与货位对照表%' THEN 1 ELSE 0 END AS TouchMaterialLocationTable,
|
||
CASE WHEN m.definition LIKE N'%货位流水号=@货位流水号%' OR m.definition LIKE N'%货位流水号 = @货位流水号%' THEN 1 ELSE 0 END AS WritesLocationSerial
|
||
FROM sys.objects o
|
||
JOIN sys.sql_modules m ON o.object_id = m.object_id
|
||
WHERE o.name IN (N'物料管理_增加', N'物料管理_增加新', N'物料管理_编辑');
|
||
```
|
||
|
||
预期:
|
||
|
||
- `TouchMaterialLocationTable = 0`
|
||
- `WritesLocationSerial = 0`
|
||
|
||
### 5.2 需要人工页面回归的场景
|
||
|
||
由于本次未启动登录态浏览器访问业务系统,以下场景需要在测试环境人工回归:
|
||
|
||
- 新增物料弹窗不显示库位。
|
||
- 编辑物料弹窗不显示库位。
|
||
- 新增物料后数据库不生成 0 库存库位记录。
|
||
- 编辑物料不改变已有真实库存库位。
|
||
- 物料库位维护页面不可编辑。
|
||
- 采购入库已有库存物料时,下拉只显示已有库存库位。
|
||
- 采购入库无库存物料时,下拉显示全库位。
|
||
- 自制件入库已有库存物料时,下拉只显示已有库存库位。
|
||
- 自制件入库无库存物料时,下拉显示全库位。
|
||
- 未选择库位时仍禁止入库。
|
||
- 选择库位后入库成功,入库记录显示正确库位。
|
||
|
||
### 5.3 风险项
|
||
|
||
- 目标数据库当前仍是旧过程,若不执行 SQL 脚本,新增/编辑物料仍可能写入标准库位或物料货位对照数据。
|
||
- 旧历史数据中已有 0 库存物料货位记录,本次不清理;若某些视图未过滤库存大于 0,仍可能被查询显示。
|
||
- `npm run build` 构建完成后进程未正常退出,建议后续单独排查构建脚本或环境中的挂起任务。
|
||
|
||
## 六、最终结论
|
||
|
||
本次代码级测试与构建测试总体通过:
|
||
|
||
- 前端库位维护能力已按设计移除。
|
||
- 入库库位选择逻辑已按设计实现。
|
||
- SQL 脚本已准备完成,静态检查符合预期。
|
||
- 生产构建已输出 `Build complete`。
|
||
|
||
当前不满足完整上线闭环的唯一关键项:
|
||
|
||
- 目标数据库尚未执行 `sql/移除物料标准库位维护.sql`。
|
||
|
||
建议先在测试数据库执行 SQL 脚本,再按 5.2 的页面回归清单完成业务验证。
|