先说结论:**WES 的用户验收测试(UAT),如果不是用真实波次数据跑全流程,等于没测。**这个坑我见过三次——三次都是 UAT"全绿通过",上线第一周全炸。下面这份清单,是我们 30 多个项目里踩出来的做法,拿去照着做就行。
为什么:测试数据测不出波次问题
WES(仓库执行系统)跟 WMS 不一样。WMS 的 UAT 你可以"点一点看看",因为逻辑相对线性;但 WES 是波次大脑——它干的事是:把一堆订单按规则拆成波次、把波次推到人/设备、再把执行结果收回来。这套逻辑的 bug,99% 藏在波次之间的交互里,而测试数据恰恰没有"交互"。
测试数据有三个致命伤,我一个一个说:
- **太干净。**手造的测试订单,每个都地址完整、库存充足、数量合理。真实波次里有取消单、缺货单、地址缺省的单、多货主混在一起的单。WES 的波次合并规则、异常分流规则,全是为这些"脏单"准备的——干净数据跑一遍,等于把最需要测的部分跳过了。
- **太稀。**测试时一个波次 10 个单,上线后一个波次 200 个单。波次量级一上去,分配算法的边界条件全变了:拣货员不够分、输送线堵了、波次优先级打架。这些在 10 个单的测试里永远不会出现。
- **没有时间压力。**测试是上午 10 点悠闲地点鼠标,上线是凌晨 2 点大促波次 5 分钟必须下发。UAT 如果不掐着真实节拍跑,你永远不知道波次下发超时了 3 分钟意味着什么。
所以第一条铁律:**UAT 数据必须从生产环境抄,脱敏后原样跑。**我们项目里的经验值是:至少抄 3 个完整波次,每个波次不少于 80 个订单,且必须包含最近一次大促/高峰日的波次。波次数和订单量按仓库规模调,但"3 个波次"这个下限我建议你别砍——少于 3 个,波次间的合并、打架、排队逻辑根本测不全。
分三步:拿真实波次跑 UAT
第一步:准备,冻结基线。
- 从生产系统导出 3 个真实波次的全量数据:订单、库存快照、库位、人员排班。脱敏(客户名、地址、电话替换掉),但订单结构、数量分布、异常比例一个不许动。
- 把这批数据在测试环境冻结为基线:任何人不得在 UAT 期间往测试库里手加工单。一旦有人手加工单,测试结果就不可复现,出了 bug 你都不知道是系统问题还是数据问题。
- 写用例,分三级。P0 是阻断级:波次下发、波次取消、异常分流、断电续波——这些挂了,上线就别想。P1 是主要流程:波次合并、优先级调度、任务回收、报表。P2 是次要:界面展示、导出、权限。我们项目的经验,用例总数一般在 120~200 条之间,其中 P0 占 20% 左右。P0 一条都不能少。
第二步:三轮跑法,一轮比一轮狠。
- 第一轮:冒烟轮。 1 个波次走完,全员熟悉流程,目标是把环境问题、权限问题、数据问题先暴露出来。这一轮允许乱,目标是"跑通"。
- 第二轮:回归轮。 3 个波次全跑,掐真实节拍,重点测异常场景:波次中途取消一半订单、某个拣货员突然下线、输送线报警暂停。这一轮的目标是"找 bug",找到的 bug 修完必须重跑对应波次。
- 第三轮:验收轮。 重新跑 3 个波次,全程录像(屏幕录像就行),客户关键用户签字确认每一步结果。这一轮的目标是"定稿"——跑完,UAT 报告就是验收依据。
三轮之间不许跳。见过客户说"第一轮挺顺的,直接验收吧"——顺恰恰是因为第一轮只跑了 1 个波次。
第三步:定验收线,白纸黑字。
验收标准必须在 UAT 开始前就写进文档,双方签字,事后不许改。我们的经验标准是:
- P0 用例通过率 100%,一条不让;
- P1 用例通过率 ≥95%;
- P2 用例通过率 ≥90%;
- P0 缺陷关闭率 100%,且关闭必须经过复测,不能"开发说修好了"就算;
- 3 个真实波次全流程跑通,无人工干预兜底("这个地方上线后人工盯一下"不算通过)。
最后一条最重要。UAT 里凡是靠人工兜底的环节,上线后 100% 会在你最忙的时候爆。
两次"客户作死"实录
第一次:拿测试数据糊弄,老板签了字,大促首周炸了。
2023 年,华东一家 3PL,WES 上线。客户嫌抄生产数据麻烦,自己造了 50 个"标准订单"跑 UAT,全绿,老板签字上线。结果"双 11"预热第一波:一个波次 320 多个订单,波次合并规则里有个边界条件——同一个 SKU 在多个波次里同时出现时,分配量会被重复计算。测试数据里每个 SKU 只出现一次,这个 bug 躺得好好的。上线当天,拣货任务重复下发,两个拣货员被派去同一个库位抢同一箱货,输送线堵了 40 分钟。那天晚上我们 6 个人在现场人工拆波次,干到凌晨 3 点。复盘时客户 IT 经理说:"UAT 的时候真没测出来。"我说:"你们 UAT 的数据里,这个场景本来就不存在。"
第二次:跳过异常场景,停电了才发现续波没测过。
2024 年,华南一家电商仓。UAT 跑得很认真,3 个真实波次全绿,验收签字。但客户把"断电续波"这个 P0 用例划掉了,理由是"机房有 UPS,不会断电"。上线第三周,园区变压器检修,UPS 只撑了 20 分钟,服务器还是断了。来电之后,WES 里一半波次卡在"执行中",一半卡在"已下发",续波功能从来没在真实数据上跑过,点了"恢复"直接报错。那 3 个小时,仓库 200 多号人站着等系统,全靠主管拿纸单人工分。后来我们补测才发现:续波逻辑在波次跨天(0 点前后)的场景下有个时间戳 bug,测试环境从来没跨过天。这个坑,UAT 里加一个"模拟断电"用例就能避开,成本是半天;上线后爆掉的成本,是 3 小时停摆加客户的信任。
上线前夜 checklist:验收线之外的 10 件事
UAT 全绿之后、上线之前,还有 10 件事,一件一件打勾。打印出来贴墙上:
- ☐ 3 个真实波次已跑完,录像存档,客户关键用户已签字
- ☐ P0 缺陷关闭率 100%,每个关闭项有复测记录
- ☐ 异常场景用例(取消单、缺货、断电续波、人员下线)全部跑过
- ☐ 波次下发节拍实测:从接单到下发,耗时在 SLA 内(我们的经验:常规波次 5 分钟内)
- ☐ 回滚方案已演练:WES 挂了,切回老系统/人工流程,全员知道怎么切
- ☐ 监控告警已配置:波次积压、任务超时、下发失败,短信/电话到人
- ☐ 上线当晚值班表已排:开发、实施、客户 IT,三方都在场
- ☐ 数据备份已做:生产库全备 + 可恢复验证
- ☐ 客户老板已签字:UAT 验收报告 + 上线确认书,两份都有
- ☐ "人工兜底清单"已清零:UAT 里所有"先人工盯一下"的环节,要么修掉,要么写进 SOP 并指定负责人
第 9 条单独说一句:**老板不签字,就不上线。**见过太多项目,IT 经理觉得"差不多了",老板在外出差没签字,半夜出问题,老板第一句话是"我没同意上线"。签字不是形式主义,是责任划分。上线前夜 checklist 里,这是最便宜的一条,也是最容易被跳过的一条。
一个反常识的判断
最后说个反常识的:UAT 通过率 100%,是危险信号,不是好消息。
正常的 UAT,第二轮回归轮一定会炸出一堆 bug——真实波次的脏数据、异常场景,不可能一个问题都没有。如果你的 UAT 从头到尾全绿,只有两种可能:用例太水,或者数据太干净。健康的 UAT 曲线是:第一轮冒烟小炸,第二轮回归大炸,修完重跑,第三轮验收全绿。全绿来得太早,说明你没测到真东西。
所以今晚回去,打开你们的 UAT 计划,搜一下里面有没有"脏数据"三个字——取消单、缺货单、跨天波次、断电续波。如果没有,把计划打回去重做。UAT 多花 3 天,总比上线后花 3 个通宵救火强。这个账,我帮 30 多个客户算过,每一次都是 UAT 便宜。
作者:林晓|WMS 实施顾问








