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接口测试知识体系。你一看就明白,三个接口各有侧重,但核心都是「数据准确、链路稳定、异常可恢复」。

MES接口测试知识体系 MES系统 ERP系统 PLC / SCADA系统 WMS系统 ERP接口测试要点 • 数据完整性校验 • 幂等性测试 • 异常场景覆盖 PLC/SCADA测试要点 • 协议兼容性测试 • 实时性测试 • 断线重连测试 WMS接口测试要点 • 事务一致性 • 批次追溯 • 异步通知测试 核心目标:数据准确 · 链路稳定 · 异常可恢复 协议:SOAP / REST / MQ / OPC UA / Modbus / 中间表

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对物料。每个接口的侧重点不同,但测试方法论是通用的:先模拟、再联调、最后压测。别偷懒,接口测好了,上线才能睡个安稳觉。


专注资料整理