Files
ttx-project-doc/出库单接口文档/shopee-3.2.13-update-order-test-cases.md

12 KiB
Raw Permalink Blame History

Shopee 3.2.13 部分更新销售订单接口测试用例

接口信息

  • 接口:3.2.13 WMS -> WES 部分更新销售订单
  • Shopee URLPOST /api/v2/automation/tovendor/outbound/salesorder/update_order
  • WES 本地入口:POST http://127.0.0.1:9001/api/wms/api/sync/in
  • Content-Typeapplication/json
  • EDI 配置 keyupdate_order
  • WMS APIshopee.outbound.salesorder.updateOrder
  • XSLTedi-shopee/src/main/resources/xslt/out/3_2_13_update_order.xslt
  • 测试日期:2026-07-28
  • 测试仓库:PHIXP

测试范围

  1. EDI XSLT 将 Shopee 原始字段转换为 WES 请求字段。
  2. WES 必填字段校验和订单存在性校验。
  3. single_attr_list 单选属性解析、订单扩展字段更新和属性字典同步。
  4. multi_attr_list 多选属性解析、订单扩展字段更新和属性字典同步。
  5. 相同请求重复执行时,属性字典不产生重复记录。
  6. 测试数据清理和订单原值恢复。

本次请求格式以《Shopee Automation Vendor 接入协议手册出库模块映射WES字段V1.2.1》3.2.13 章节为准。协议请求使用 snake_case 字段;EDI XSLT 转换后,WES 内部请求使用 camelCase 字段。

本次未调用 Shopee 外部测试环境。测试按“协议请求 -> 本地 XSLT 转换 -> WES 9001 内部接口 -> 数据库核验”拆分执行,因此报告同时保留协议请求和 WES 实测响应。Shopee 对外响应协议需在 EDI 对外路由可用后另行联调。

前置条件

  1. WES 服务已在 9001 端口启动。
  2. 数据库为 ttx-xwms-test,仓库为 PHIXP
  3. 成功路径测试订单:OBSGD0002607281457
  4. config_detail 已维护以下 SHOPEE_ORDER_HEADER 属性组:
    • service_code
    • shop_id
    • inner_packaging
  5. WES 内部接口使用请求头 X-DB: ttx-xwms-test

字段转换说明

Shopee 字段 WES 字段 数据库字段
whs_id warehouseCode shipment_header.warehouseCode
order_number orderNumber shipment_header.erpOrderCode
single_attr_list.service_code serviceCode shipment_header_ext1.serviceCode
multi_attr_list.shop_id shopIdshopIdStr shipment_header_ext1.shopIdshopIdStr
multi_attr_list.inner_packaging innerPackaginginnerPackagingType shipment_header_ext1.innerPackaginginnerPackagingType
single_attr_list singleAttrList config_detail 单选属性字典
multi_attr_list multiAttrList config_detail 多选属性字典

3.2.13 标准请求格式

以下结构依据 V1.2.1 协议 3.2.13 章节。whs_idorder_number 必填,其余字段按“有传则更新,未传不更新”处理。

{
  "whs_id": "PHIXP",
  "order_number": "OBSGD0002607281457",
  "can_group_picking": 1,
  "group_key": "standard_group",
  "urgent_flag": 99,
  "cut_off_time": 1767837541,
  "ctime": 1767751167,
  "ship_by_date": 1767751167,
  "purchase_time": 1767751167,
  "single_attr_list": [
    {
      "attr_key": "service_code",
      "attr_value_id": "STANDARD",
      "attr_value_type": "",
      "attr_value_name": "STANDARD"
    }
  ],
  "multi_attr_list": [
    {
      "attr_key": "shop_id",
      "attr_value_list": [
        {
          "attr_value_id": "12345678",
          "attr_value_type": "",
          "attr_value_name": "Electronics Store SG"
        },
        {
          "attr_value_id": "87654321",
          "attr_value_type": "",
          "attr_value_name": "Fashion Store SG"
        }
      ]
    },
    {
      "attr_key": "inner_packaging",
      "attr_value_list": [
        {
          "attr_value_id": "CONS-BUBBLE-S",
          "attr_value_type": "3",
          "attr_value_name": "Small Bubble Wrap"
        },
        {
          "attr_value_id": "CONS-TAPE-01",
          "attr_value_type": "3",
          "attr_value_name": "Sealing Tape"
        }
      ]
    }
  ]
}

协议允许的单选属性包括 service_codechannel_idfulfillment_chain_idorder_structureorder_sizeshop_groupstore_idparcel_idlm_tracking_nopickup_regiondelivery_regionsls_tracking_noactual_weightlane_codehandoverzone_code_idouter_packaging

协议允许的多选属性包括 shop_idshopee_order_sninner_packaging

测试结果汇总

用例 场景 预期结果 实测结果
TC-01 空请求体 返回“无效的消息体” 通过
TC-02 订单不存在 按协议返回成功 不通过:WES 返回“出库单不存在”
TC-03 现有订单,不传更新字段 返回成功且不修改业务字段 通过
TC-04 XSLT 转换单选和多选属性 生成合法 JSON,字段和值完整 通过
TC-05 single_attr_list 使用现有字典值 更新 serviceCode,字典记录保持唯一 通过
TC-06 multi_attr_list 使用现有字典值 更新店铺和内包装字段,字典记录保持唯一 通过
TC-07 新单选、多选枚举增量同步 新增 1 条单选、2 条多选字典记录 通过
TC-08 相同属性请求重复执行 接口均成功,字典不重复 通过
TC-09 测试数据恢复与清理 订单恢复原值,临时字典记录为 0 通过

TC-01 空请求体

协议请求:

POST /api/v2/automation/tovendor/outbound/salesorder/update_order
Content-Type: application/json

{}

协议预期:请求无效。

WES 内部实测结果:

{"code":"1","msg":"无效的消息体","notify":true,"error":true}

结论:必填字段校验生效。

TC-02 订单不存在

协议请求体:

{
  "whs_id": "PHIXP",
  "order_number": "CODEX-3-2-13-NOT-EXIST"
}

协议预期:订单不存在时返回成功。

WES 内部实测结果:

{"code":"1","msg":"出库单不存在","notify":true,"error":true}

结论:按仓库和订单号查询生效,但返回行为不符合 3.2.13 协议“若订单不存在返回成功即可”的要求,记录为待修复问题。

TC-03 现有订单无更新字段

协议请求体:

{
  "whs_id": "PHIXP",
  "order_number": "202607280002_0"
}

预期及实测结果:

{"code":"0","msg":"Success","notify":true,"error":false}

结论:订单存在时成功返回;未携带扩展字段和属性列表,不修改订单业务字段。

TC-04 EDI XSLT 属性转换

协议 JSON 进入 EDI 后转换成供 XSLT 处理的中间 XML;本次用于验证的关键中间 XML:

<o>
  <order_number>OBSGD0002607281457</order_number>
  <single_attr_list>
    <e>
      <attr_key>service_code</attr_key>
      <attr_value_id>STANDARD</attr_value_id>
      <attr_value_name>STANDARD</attr_value_name>
    </e>
  </single_attr_list>
  <multi_attr_list>
    <e>
      <attr_key>shop_id</attr_key>
      <attr_value_list>
        <e><attr_value_id>12345678</attr_value_id><attr_value_name>Electronics Store SG</attr_value_name></e>
        <e><attr_value_id>87654321</attr_value_id><attr_value_name>Fashion Store SG</attr_value_name></e>
      </attr_value_list>
    </e>
    <e>
      <attr_key>inner_packaging</attr_key>
      <attr_value_list>
        <e><attr_value_id>CONS-BUBBLE-S</attr_value_id><attr_value_type>3</attr_value_type></e>
        <e><attr_value_id>CONS-TAPE-01</attr_value_id><attr_value_type>3</attr_value_type></e>
      </attr_value_list>
    </e>
  </multi_attr_list>
</o>

实测转换结果摘要:

{
  "serviceCode": "STANDARD",
  "shopId": "[\"12345678\",\"87654321\"]",
  "shopIdStr": "12345678,87654321",
  "innerPackaging": "CONS-BUBBLE-S,CONS-TAPE-01",
  "innerPackagingType": "3,3",
  "singleAttrCount": 1,
  "multiAttrCount": 2,
  "shopValueCount": 2,
  "innerValueCount": 2
}

结论:转换结果是合法 JSON,单选、多选列表及派生字段完整。

TC-05 single_attr_list 现有字典值

协议请求关键字段:

{
  "whs_id": "PHIXP",
  "order_number": "OBSGD0002607281457",
  "single_attr_list": [
    {
      "attr_key": "service_code",
      "attr_value_id": "STANDARD",
      "attr_value_type": "",
      "attr_value_name": "STANDARD"
    }
  ]
}

实测结果:

  • 接口返回 code=0
  • shipment_header_ext1.serviceCode = STANDARD
  • config_detailservice_code / STANDARD 数量为 1
  • 字典说明为 STANDARD

TC-06 multi_attr_list 现有字典值

协议请求关键字段:

{
  "whs_id": "PHIXP",
  "order_number": "OBSGD0002607281457",
  "multi_attr_list": [
    {
      "attr_key": "shop_id",
      "attr_value_list": [
        {"attr_value_id":"12345678","attr_value_type":"","attr_value_name":"Electronics Store SG"},
        {"attr_value_id":"87654321","attr_value_type":"","attr_value_name":"Fashion Store SG"}
      ]
    },
    {
      "attr_key": "inner_packaging",
      "attr_value_list": [
        {"attr_value_id":"CONS-BUBBLE-S","attr_value_type":"3","attr_value_name":"Small Bubble Wrap"},
        {"attr_value_id":"CONS-TAPE-01","attr_value_type":"3","attr_value_name":"Sealing Tape"}
      ]
    }
  ]
}

数据库实测结果:

{
  "shopId": "[\"12345678\", \"87654321\"]",
  "shopIdStr": "12345678,87654321",
  "innerPackaging": "CONS-BUBBLE-S,CONS-TAPE-01",
  "innerPackagingType": "3,3"
}

字典核验:4 个多选枚举的记录数量均为 1,名称和 attrValueType 正确。

TC-07 新枚举增量同步

测试值:

属性类型 groupType identifier description value1
单选 service_code CODEX3213_SC_20260728 Codex 3.2.13 single test test
多选 shop_id CODEX3213_SHOP_A Codex 3.2.13 multi A test
多选 shop_id CODEX3213_SHOP_B Codex 3.2.13 multi B test

实测结果:

  • 接口返回 code=0
  • 订单 serviceCodeshopIdshopIdStr 更新为请求值。
  • config_detail 新增 3 条记录,字段内容与请求一致。

TC-08 重复请求幂等性

执行方式:连续两次发送 TC-07 的相同请求。

两次接口响应:

[
  {"attempt":1,"http":200,"response":{"code":"0","msg":"Success","notify":true,"error":false}},
  {"attempt":2,"http":200,"response":{"code":"0","msg":"Success","notify":true,"error":false}}
]

数据库核验:

  • CODEX3213_SC_20260728count = 1
  • CODEX3213_SHOP_Acount = 1
  • CODEX3213_SHOP_Bcount = 1

结论:重复请求不会生成重复属性字典记录。

TC-09 数据恢复和清理

清理动作:

  1. 通过 3.2.13 接口将订单字段恢复为测试前的值。
  2. 先按仓库、记录类型和测试 identifier 查询临时记录 ID。
  3. 仅按查询到的主键 244424452446 删除临时测试记录。
  4. 再次查询订单字段和临时记录数量。

最终核验结果:

{
  "restoreResponse": {"code":"0","msg":"Success","notify":true,"error":false},
  "deleted": 3,
  "remaining": 0,
  "order": {
    "serviceCode": "STANDARD",
    "shopId": "[\"12345678\", \"87654321\"]",
    "shopIdStr": "12345678,87654321",
    "innerPackaging": "CONS-BUBBLE-S,CONS-TAPE-01",
    "innerPackagingType": "3,3"
  }
}

结论:测试订单已恢复,临时测试字典无残留。

测试结论

3.2.13 接口的 XSLT 转换、单选属性、多选属性、属性字典新增、已有字典复用和重复请求去重均通过。

发现 1 项协议偏差:V1.2.1 协议要求订单不存在时返回成功,当前 WES 实现返回“出库单不存在”。该场景 TC-02 判定为不通过,需调整实现后复测。

本次未执行 Gradle 静态编译或自动化测试任务;结论来自 2026-07-28 的实际 HTTP 调用、XSLT 转换和数据库核验结果。