4.0 KiB
14 Playwright 冒烟脚本
Type: task Status: resolved Blocked by: 10, 11, 12, 13
Scope
按 assets/smoke-plan.md 40 步实现 demo/smoke.py:
- 骨架照搬 t04(route 反代注 Bearer/CORS、multipart Python 分流两处、pymysql 取证、e2c-dr-* 夹具+正门清扫、偏好/规则写后还原)。
- 报告 demo/smoke-report.json(summary.verdict 全 ok 即 PASS)+ demo/shots/ 截图。
- 需本地起服(verify+MinIO env);跑通全绿为收口标准(FAIL 逐条修复 demo 侧,只测不修后端)。
Accept
40 步 ALL_PASS=true,console error=0,零 PUT/DELETE。
Answer
达成:第八跑 40 steps, 0 failed (176.4s),ALL_PASS=true;GET 147 + POST 79(零 PUT/DELETE);console_errors=0、http_fails=0;唯一路径 91≥50。报告 demo/smoke-report.json,截图 demo/shots/。
八轮迭代轨迹(崩溃轮 1-4 → 全量轮 5-8):
- 第 1-4 轮:delete_key 崩溃 / 输出缓冲卡死 / 步 23 中文 URL 未 quote 崩(两次同因)/ 步 30 对象字面量缺括号崩。
- 第 5 轮(首次全量 29/11):定位出李普通撞号(seed 预置联系人 13812340002 与步 16 夹具撞号→failedRows 未落库连锁)、
ensure_seeds 在 sweep 之前(上轮 seed 被 find 命中不重建→随即被 sweep 清掉→整轮查重基线缺失)、transfer 明细列=assign_status 非 status、assignableUsers 排除发起人与总监本人(assign 目标改动态取 assignable[0])。 - 第 6 轮(31/9):新增 http_fails 捕获(page.on response status≥400)→ 定位 404 project/page = 运行 jar 旧于源码(票 07 后源码加了端点);步 26 save 从 dpMode 收集把共享库 nameMatchMode 写成 1(EXACT 污染,出厂 FUZZY=2)。
- 第 7 轮(39/1):jar 重建重启(project/page 200);seed 2f 修旧联系人职务(张关键 job_title_id=NULL+名字不在字典→loadContacts 的 _jobCode 反查空→saveListAll「职务必填」拦截 batchEdit,六跑步 17/39 缺失实锤);quickAdd 后显式 loadContacts() 重拉(fetch 直调不刷新 _contacts→lid=None 连锁);步 26 save 前显式 loadDedup() 填充;pool+ASSIGNED 组合互斥呈现(Mapper L83 owner=me 与公海 owner IS NULL 恒冲突→先呈现默认视图空现象再清 fViewType 走基础集)。
- 第 8 轮(40/0 全绿):最后一项步 10 实锤 demo onclick 陷阱——
dlgOpen把 fn 直接挂btn.onclick(浏览器传 PointerEvent 作首参),doEdit 首次带 confirmSimilar 形参后序列化出confirmSimilar=[object PointerEvent]→后端 400;且 doEdit 原不处理 edit 的 L2 needConfirm 响应(六跑「toast 保存成功但 DB 没变」假成功实锤)。修复:doEdit/doCreate 首参防御(非显式 'true' 一律 undefined,qs 跳过)+ doEdit 增加 needConfirm simbox 分支(同 doCreate 契约)。第八跑步 10 全链 PASS:simbox=命中→确认保存→db v0→v1 名字-改。
demo 侧修复(demo 为本 effort fork,属票 11 详情层范畴的缺陷修复):doEdit needConfirm 分支+confirmSimilar 参数防御、doCreate 同防御(onclick 陷阱消除)、loadContacts 由 quickAdd 冒烟后显式重拉(demo 本身行为未改)。
seed/环境修复(纪律允许范围):main 调序 sweep 先于 ensure_seeds+查重基线自检行;ensure_seeds 2d 查重模式幂等归位 FUZZY(2)/2e 冒烟联系人清扫/2f 旧 seed 联系人职务按 dict_item 归位;sweep 覆盖 e2c-dr 客户+联系人+导入任务+交割单(2 小时窗);重建 fat jar(corretto-17+IDEA bundled mvn,先杀 8080 旧进程解文件锁)并重启 verify+MinIO。
后端行为甄别(只测不修,均如实呈现):edit L2 相似命中返回 needConfirm 不落库(demo 已补确认分支后通过);pool 工作台带 ASSIGNED 视图恒空(视图条件与公海口径互斥,冒烟 note 记录默认视图行=0 现象);步 26 断言「匹配方式不被污染」作共享库保护。
取证:demo/_t14d7.py(DB 联系人职务+pool 复现+edit CAS 复现)、demo/_run7.log/_run8.log、demo/_jarbuild.log。