3. 测试环境搭建:测试数据库准备、TMS模拟器配置、ERP接口Mock服务部署

一致性校验测试的成败,高度依赖测试环境的真实性与可控性。本章将指导你完成三大核心组件的搭建:测试数据库(存放轨迹与签收数据)、TMS模拟器(模拟车辆GPS上报与节点回传)、ERP接口Mock服务(模拟ERP签收确认与回执)。

3.1 测试数据库准备

测试数据库用于存储TMS轨迹节点记录与ERP签收记录,是校验脚本的比对基准。建议使用MySQL 8.0或PostgreSQL 14+,创建独立Schema tms_erp_test。

3.1.1 核心表结构

表名 用途 关键字段
tms_track_node 存储TMS模拟器上报的轨迹节点 id, waybill_no, node_code, node_time, gps_lat, gps_lng, create_time
erp_sign_record 存储ERP签收记录(含Mock数据) id, waybill_no, sign_time, sign_status, sign_person, create_time
check_result 存储一致性校验结果 id, waybill_no, tms_node, erp_sign, diff_type, diff_desc, check_time

3.1.2 初始化脚本示例

-- 创建测试数据库
CREATE DATABASE IF NOT EXISTS tms_erp_test
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_unicode_ci;

USE tms_erp_test;

-- TMS轨迹节点表
CREATE TABLE tms_track_node (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  waybill_no VARCHAR(32) NOT NULL COMMENT '运单号',
  node_code VARCHAR(16) NOT NULL COMMENT '节点编码(如:PICKUP/ARRIVE/SIGN)',
  node_time DATETIME NOT NULL COMMENT '节点时间',
  gps_lat DECIMAL(10,7) DEFAULT NULL COMMENT 'GPS纬度',
  gps_lng DECIMAL(10,7) DEFAULT NULL COMMENT 'GPS经度',
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_waybill (waybill_no),
  INDEX idx_node_time (node_time)
) ENGINE=InnoDB;

-- ERP签收记录表
CREATE TABLE erp_sign_record (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  waybill_no VARCHAR(32) NOT NULL COMMENT '运单号',
  sign_time DATETIME NOT NULL COMMENT '签收时间',
  sign_status TINYINT NOT NULL DEFAULT 1 COMMENT '签收状态:1-正常 2-异常',
  sign_person VARCHAR(64) DEFAULT NULL COMMENT '签收人',
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_waybill (waybill_no),
  INDEX idx_sign_time (sign_time)
) ENGINE=InnoDB;

-- 校验结果表
CREATE TABLE check_result (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  waybill_no VARCHAR(32) NOT NULL,
  tms_node VARCHAR(16) DEFAULT NULL,
  erp_sign VARCHAR(16) DEFAULT NULL,
  diff_type VARCHAR(32) NOT NULL COMMENT '差异类型:TIME_MISMATCH/NODE_MISSING/STATUS_ERROR',
  diff_desc VARCHAR(256) DEFAULT NULL,
  check_time DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_waybill (waybill_no)
) ENGINE=InnoDB;
数据治理建议:测试数据库应预置三组数据——正常匹配数据、时间偏差数据(±5分钟/±30分钟/±2小时)、缺失节点数据(TMS有节点但ERP无签收,或反之)。每组至少10条运单,覆盖常见边界场景。

3.2 TMS模拟器配置

TMS模拟器负责按预设路线和时间轴,向测试数据库写入轨迹节点。推荐使用轻量级Python脚本或JMeter插件实现。

3.2.1 模拟器核心参数

参数 说明 示例值
waybill_prefix 运单号前缀,用于区分测试批次 TEST_202503_
node_sequence 节点顺序列表,模拟真实轨迹 PICKUP → ARRIVE → SIGN
time_offset 节点间时间间隔(分钟) 30, 60, 120
gps_base 基准GPS坐标,模拟起始位置 39.9042, 116.4074
batch_size 单次模拟运单数量 50

3.2.2 模拟器配置示例(Python)

# tms_simulator_config.py
SIMULATOR_CONFIG = {
    "db_host": "localhost",
    "db_port": 3306,
    "db_user": "tms_test",
    "db_password": "Test@2025",
    "db_name": "tms_erp_test",
    "waybill_prefix": "TEST_202503_",
    "node_sequence": ["PICKUP", "ARRIVE", "SIGN"],
    "time_offset_minutes": [0, 30, 90],  # 相对起始时间的偏移
    "gps_base": {"lat": 39.9042, "lng": 116.4074},
    "batch_size": 50,
    "simulation_mode": "normal"  # normal / time_skew / node_missing
}
测试技巧:在simulation_mode中切换time_skew模式,模拟TMS节点时间比ERP签收时间晚30分钟的场景;切换node_missing模式,随机跳过20%的节点,以验证校验脚本的缺失检测能力。

3.3 ERP接口Mock服务部署

ERP签收接口Mock服务用于模拟真实ERP系统的签收确认与回执。推荐使用WireMock或MockServer,部署在Docker容器中。

3.3.1 Mock服务接口定义

接口 方法 请求参数 响应示例
/api/erp/sign/confirm POST { "waybill_no": "TEST_001", "sign_time": "2025-03-10 14:30:00", "sign_person": "张三" } { "code": 200, "message": "签收成功", "sign_id": "SIG20250310001" }
/api/erp/sign/query GET ?waybill_no=TEST_001 { "code": 200, "data": { "sign_time": "2025-03-10 14:30:00", "sign_status": 1 } }
/api/erp/sign/batch POST { "waybill_list": ["TEST_001", "TEST_002"] } { "code": 200, "data": [ { "waybill_no": "TEST_001", "sign_status": 1 }, ... ] }

3.3.2 Docker部署命令

# 使用WireMock镜像部署ERP Mock服务
docker run -d \
  --name erp-mock \
  -p 8080:8080 \
  -v /data/erp-mock/mappings:/home/wiremock/mappings \
  -v /data/erp-mock/__files:/home/wiremock/__files \
  wiremock/wiremock:3.5.0 \
  --global-response-templating \
  --verbose
注意:Mock服务必须支持延迟响应模拟(如200ms/500ms/1000ms),以测试校验脚本在ERP接口超时或慢响应场景下的稳定性。WireMock中可通过fixedDelayMilliseconds参数配置。

3.4 整体环境架构图

下图展示了测试环境中三个核心组件之间的数据流向与依赖关系:

测试环境架构图:TMS模拟器 → 测试数据库 → ERP Mock服务 测试环境架构图 TMS模拟器 Python / JMeter 测试数据库 MySQL 8.0 ERP Mock服务 WireMock / Docker 写入轨迹节点 查询签收记录 校验脚本 Python / SQL 读取比对数据 实时接口校验(可选) 说明: TMS模拟器写入轨迹节点 → 测试数据库存储原始数据 → ERP Mock服务提供签收接口 → 校验脚本从数据库和Mock服务双向读取比对。

3.5 环境验证清单

完成搭建后,请逐项确认以下检查点:

  1. 数据库连通性:使用mysql -u tms_test -p -h localhost -P 3306 tms_erp_test -e "SELECT 1"验证连接成功。
  2. TMS模拟器写入验证:执行模拟器后,查询tms_track_node表应有50条记录,且waybill_no以TEST_202503_开头。
  3. ERP Mock服务可用性:执行curl -X POST http://localhost:8080/api/erp/sign/confirm -H "Content-Type: application/json" -d '{"waybill_no":"TEST_001","sign_time":"2025-03-10 14:30:00","sign_person":"张三"}',应返回{"code":200}。
  4. 校验脚本预运行:执行一次校验脚本,确认check_result表生成结果,且无数据库连接或接口超时错误。
最佳实践:建议将环境搭建过程编写为一键部署脚本(Shell或Ansible),包含数据库初始化、Docker容器启动、模拟器配置下发。每次测试前执行reset_test_env.sh,确保环境从干净状态开始,避免历史数据干扰。