You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

4.2 KiB

01 · e2e-core / e2e-heavy 契约改写

Type: task Status: resolved

Question

round-1 的 e2e-core.py(112 例 / 55 端点)与 e2e-heavy.py(6 轮)写于返工前旧契约,约半数调用已死(PUT/DELETE/路径变量/@RequestBody JSON)。全部调用层改写到返工后扁平动作动词契约,保持或显式重定义断言语义,使套件在新契约上可重跑。

要点:

  1. 逐用例映射:PUT/DELETE → POST 动词、/{id}?id=、workspace 进表单字段、roleTyperole、PATH_OP 扁平化、@RequestBody → 表单绑定、edit 补 CAS version+isBizNegotiated+isChild——映射坑位直接复用 demo 票 10 对照表(.scratch/customer-e2e/issues/10-demo-contract-sync.md
  2. 断言语义:旧行为随返工改变的用例(如看板对 pool 从数据返回变 67001 拒绝)断言跟着改并记录改了什么
  3. 产出:用例×端点矩阵刷新表 + 缺陷用例处置表(D-01 已修复验预期转绿;D-05/D-07/D-04 标「缺陷验证模式」——预期失败、不阻断、不重复排查)
  4. 静态验收:改写后 grep 零旧契约残留(PUT|DELETE|/api/customer/\d+//{id} 拼接等),对照 dump_api_out.txt 全部调用命中

素材:.scratch/customer-module/API-SUMMARY.md(73 端点权威)、.scratch/customer-rework/dump_api_out.txt、round-1 两脚本(.scratch/customer-e2e/e2e-core.py / e2e-heavy.py)。


Answer

承载方式:复制 r2 版本(.scratch/customer-e2e/e2e-core-r2.py 884 行 / e2e-heavy-r2.py 910 行),不覆盖 round-1 原件,历史可追溯;结果产物落本目录。两脚本 py_compile PASS、UTF-8 无 BOM。

改写内容(全量明细见 matrix-r2.md):

  • URL / method 层 34 处:PUT/DELETE → POST 动词、/{id}?id=、workspace 进表单字段、POST /api/customer/create、PATH_OP 扁平化(focus 族)、@RequestBody → 表单绑定(reminder save 五字段)等;transfer/assign 的 List<Long> 多值绑定经 Controller 签名实核(params 多值,非 form)。
  • 参数 / 出参层 5 处:company-lookup 参数名 companyName(API-SUMMARY §2.3)、联系人补必填 phone、members roleTyperole 显式断言、restart_service JVM 候选列表兜底、import _uploadduplicate_strategy seam(票 02 F8 挂点)。
  • 同形不改 4 族:Ownership 族、preference saved-view 族(全平台唯一 @RequestBody JSON 例外)、check 族、import upload / transfer 族。
  • 断言语义变更 7 处(逐条记录于 matrix-r2.md §二):oplog 白名单 11→17 种、append-only 断言改打未注册 follow/edit 端点、confirmSimilar 断言翻转(返工票 04 已销缺口)、F-16 查重单例前提更新、幽灵客户补 phone 聚焦 67002、D-08 续编消歧(round-1 core/heavy 的 D-02 编号冲突)。

缺陷用例处置(matrix-r2.md §三):D-01 预期转绿(已修复验);D-02/D-03 分支保留可能复现;D-04/D-05/D-06/D-07 缺陷验证模式(预期失败、warn 不阻断、不重复排查);新缺陷自 D-08 续编。

静态验收(要点 4)——PASS

  1. grep 零旧契约残留('PUT'|'DELETE' 字面量、sess.put/delete、URL 路径拼接均 0)
  2. 调用×端点对账 55 调用端点 = 54 命中 dump_api_out.txt + 1 预期例外POST /api/customer/follow/edit,append-only 断言故意打的未注册端点),零未命中 → calls-r2.json(对账工具 scan_calls.py 保留可复跑)
  3. 客户域 73 端点未覆盖 19:10 个 = 票 02 增量范围(agreement×5、dedup get/save、view-form get/save、company-lookup 的 batch-update),9 个 = round-1 即未覆盖的维持项(ping、POST /api/customer/page、contact/detail、列偏好 get/save、claim/assign/release-pool 批量三兄弟、reminder 读端点)——不进票 02 票面,票 06 对账附录如实记录
  4. 两脚本语法与编码验收 PASS(见上)

移交:票 02 输入 = 上述 10 端点新用例 + _upload duplicateStrategy 变体 + detail-head viewTouch 副作用断言 + oplog action 值域断言;票 04 = core→heavy→增量执行顺序、heavy 六轮深度(D-07 计时)现场定。