4. MES接口测试策略:与ERP、PLC/SCADA、WMS系统接口测试
MES系统不是孤岛。它要跟ERP要工单,跟PLC要数据,跟WMS要库存。说白了,接口测试才是MES项目里最磨人的部分。我做过好几个项目,上线前大家觉得功能测完了就万事大吉,结果一联调,接口先崩了。
这一章,我就把跟三大核心系统的接口测试策略掰开揉碎了讲。你想想看,这三个接口代表了MES的上下游:ERP管计划层,PLC/SCADA管执行层,WMS管物流层。任何一个断了,生产现场就得停摆。
4.1 与ERP系统接口测试
ERP和MES的接口,核心是数据同步。ERP下发工单、BOM、工艺路线,MES回传报工、质检、物料消耗。我见过最典型的坑,就是两边数据格式对不上。
4.1.1 接口类型与协议
常见的ERP接口方式有这么几种:
| 接口方式 | 协议 | 适用场景 |
|---|---|---|
| Web Service (SOAP) | HTTP/HTTPS | 传统ERP(如SAP) |
| RESTful API | HTTP/HTTPS | 现代ERP、云ERP |
| 中间表/视图 | 数据库直连 | 高吞吐、批量数据 |
| MQ消息队列 | AMQP/JMS | 异步、解耦场景 |
我个人习惯,优先用MQ或者中间表。为什么?因为生产环境网络不稳定,HTTP同步调用一旦超时,工单下发就卡住了。我曾经遇到一个项目,ERP用SOAP接口,每次下发工单要等5秒,产线工人急得直拍键盘。
4.1.2 测试要点
- 数据完整性校验:工单号、物料编码、数量、计划时间,一个字段都不能少。我习惯写个脚本,把ERP下发的JSON/XML全字段解析出来,跟数据库比对。
- 幂等性测试:同一个工单下发两次,MES不能生成两条记录。这个坑我踩过,后来加了唯一索引才解决。
- 异常场景覆盖:ERP宕机、网络断开、数据格式错误。嗯,这里要注意,MES要有重试机制和告警。
- 性能测试:批量下发1000个工单,接口响应时间不能超过30秒。我一般用JMeter压一下。
核心原则:ERP是上游,MES是下游。MES要能容忍ERP的不稳定,但不能丢数据。
4.2 与PLC/SCADA系统接口测试
这个接口最考验人。PLC是硬实时设备,数据采集频率高,协议五花八门。说白了,MES跟PLC打交道,就是跟机器打交道。
4.2.1 常见协议与采集方式
| 协议 | 特点 | 测试难点 |
|---|---|---|
| OPC DA/AE | Windows平台,COM/DCOM | DCOM配置复杂,防火墙问题 |
| OPC UA | 跨平台,安全加密 | 证书管理,地址空间解析 |
| Modbus TCP/RTU | 简单,工业标准 | 寄存器地址映射,字节序 |
| Profinet/EtherCAT | 高速,实时 | 需要专用硬件模拟 |
我记得有一次,现场PLC用的是OPC DA,MES服务器是Linux。两边折腾了三天才通,最后加了个Windows网关才搞定。你想想看,这种历史遗留问题,测试环境根本复现不了。
4.2.2 测试策略
- 协议兼容性测试:用模拟器(如Kepware、Prosys OPC UA Simulator)模拟PLC,验证MES能否正确读写数据点。
- 数据点映射测试:PLC里的DB块地址,要跟MES里的变量名一一对应。我习惯做个Excel映射表,逐条核对。
- 实时性测试:从PLC数据变化到MES收到,延迟不能超过2秒。用Wireshark抓包看时间戳。
- 断线重连测试:拔掉网线,等30秒再插上。MES要能自动恢复连接,不能丢数据。
避坑指南:我曾经遇到PLC数据采集频率太高(10ms一次),MES的OPC客户端直接崩溃。后来加了数据缓存和降采样才解决。测试时一定要压一下极限频率。
4.3 与WMS系统接口测试
WMS管仓库,MES管产线。两者接口的核心是物料流转。MES要料,WMS发料;MES完工,WMS入库。说白了,就是物料的「进」和「出」。
4.3.1 接口场景
| 场景 | 方向 | 数据内容 |
|---|---|---|
| 物料拉动 | MES → WMS | 工单号、物料编码、数量、工位 |
| 物料配送 | WMS → MES | 批次号、库位、实发数量 |
| 成品入库 | MES → WMS | 生产批号、数量、质检结果 |
| 库存查询 | MES → WMS | 物料编码、可用库存 |
4.3.2 测试重点
- 事务一致性:MES扣料成功,WMS必须同步减库存。如果WMS失败,MES要能回滚。我一般用分布式事务模拟器测这个。
- 批次追溯:WMS返回的批次号,MES要能关联到工单和产品。这个在食品、医药行业是刚需。
- 异步通知测试:WMS配送完成后,通过MQ通知MES。要测消息丢失、重复消费、顺序乱序。
- 库存准确性:MES发起拉动请求,WMS返回的库存数量要跟实际一致。我习惯写个对账脚本,每天跑一次。
个人经验:WMS接口最容易出问题的是「超时」。WMS要扫码、要上架,响应慢是常态。MES这边一定要设合理的超时时间(我一般设30秒),并且要有异步回调机制。
4.4 接口测试知识体系总览
下面这张图,是我自己总结的MES接口测试知识体系。你一看就明白,三个接口各有侧重,但核心都是「数据准确、链路稳定、异常可恢复」。
4.5 接口测试自动化实践
手工测接口太累了。我一般用Python写自动化脚本,配合Postman做冒烟,JMeter做压测。下面给个简单的示例,测ERP工单下发接口:
import requests
import json
# ERP工单下发接口测试
def test_erp_order_create():
url = "http://mes-api/erp/order"
payload = {
"order_no": "WO20241001",
"material_code": "MAT001",
"quantity": 100,
"plan_start": "2024-10-01 08:00:00",
"plan_end": "2024-10-01 18:00:00"
}
# 正常下发
resp = requests.post(url, json=payload)
assert resp.status_code == 200
assert resp.json()["code"] == "SUCCESS"
# 重复下发(幂等性)
resp2 = requests.post(url, json=payload)
assert resp2.json()["code"] == "DUPLICATE"
# 缺少必填字段
invalid_payload = {"order_no": "WO20241002"}
resp3 = requests.post(url, json=invalid_payload)
assert resp3.status_code == 400
print("ERP接口测试通过")
if __name__ == "__main__":
test_erp_order_create()
这个脚本虽然简单,但覆盖了正常、重复、异常三种场景。我建议你把这个脚本集成到CI/CD里,每次部署前跑一遍。
总结一下:MES接口测试,说白了就是三件事——跟ERP对数据,跟PLC对协议,跟WMS对物料。每个接口的侧重点不同,但测试方法论是通用的:先模拟、再联调、最后压测。别偷懒,接口测好了,上线才能睡个安稳觉。