冒烟步骤表(票 08 产出)
被测:demo/index.html?api=http://localhost:8080(本 effort fork,票 05 落点)。
形态参照:customer-frontend-handover/demo_t04_smoke.py(35 步)+ customer-contact-graph/demo_smoke_graph.py(40 步)——route 反代/DB 取证/multipart 分流/正门清扫全套照搬。
目标:≥30 步(本表 40 步),覆盖三族闭环 + 缺陷现象断言 + 网络层全局断言。
运行方式
# 前置(冒烟不自起服):
SPRING_PROFILES_ACTIVE=verify CRM_MINIO_AK=admin CRM_MINIO_SK=Itc@123456 \
java -jar crm-app/target/crm-app-1.0.0-SNAPSHOT.jar # 端口 8080
py -X utf8 .scratch/customer-demo-ref/demo/smoke.py # 系统 Python 3.13 + playwright sync(chromium 已缓存)
- 打开:
file:///…/demo/index.html?api=http://localhost:8080;认证 = page.route('http://localhost:8080/**') 反代:剥 origin/host/authorization + 注入 Bearer <debug token> + 补 CORS 头;token 前置 GET /api/auth/debug/token?userId=739564171091247104(admin 罗伟健)。
- multipart 分流:
contact/import/upload 与 import/upload 的 file part Chromium 不回传内容 → route 内截包改 Python urllib 直发完整 multipart(t04 _py_upload 同款)。
- DB 取证:pymysql 直连 8.129.84.155/crm(只读取证 + 夹具清扫),凭证同 t04。
Seed 策略(共享库写副作用纪律)
| 类别 |
策略 |
| 写夹具 |
临时前缀 e2c-dr-*(时间戳后缀),归属 ADMIN,全部写动作只落在夹具上;收尾 DB 正门硬删(customer→contact/graph/reveal_log/focus/oplog/import_task/transfer 单据关联行,幂等可重跑) |
| 只读 seed |
e2c- 既有 17 客户只读消费(归档态切换看 e2c-已归档、查重相似命中看 e2c-恒信达科技*、详情/图谱/日志用 e2c-全字段-科技 750844477165273088) |
| 偏好写(view/view-form) |
走 API 正门写后立即还原:形态 save board→断言→save list 还原;saved-view 新建→断言→delete。无 DB 直改 |
| 规则单例写 |
先 GET 记原值 → save 测试值断言 → save 还原(F-15「还原出厂值 30/7」先例口径) |
| 归属/交割 |
夹具客户 assign/transfer 到 BUDDY(744842318024015872)后随夹具删除,无四字段还原负担(不碰 e2c- collab 样例,不触发 F-13 口诀场景) |
步骤表(40 步)
标注:〔UI〕页面断言;〔DB〕数据库取证;〔NET〕api_urls 网络断言;〔D〕缺陷现象步(断言「现象按设计呈现」,不断言正确行为)。
A · 核心域闭环(步 1-19)
| # |
步骤 |
断言 |
型 |
| 1 |
打开 Demo + token 注入,首屏列表加载 |
workspace/page 200,列表行渲染 |
UI+NET |
| 2 |
三 workspace 切换 mine→overview→pool |
各自 page 请求发出;pool 不发 board/summary 且 I-06 注记可见(〔D〕兼) |
UI+NET |
| 3 |
内置视图下拉五值齐全,切 FOLLOW_UP_DUE |
请求带 viewType=FOLLOW_UP_DUE;RECENT 选项存在 |
UI+NET |
| 4 |
列筛选器:阶段=成交筛选 |
请求带 customerStage=3,结果子集 |
UI+NET |
| 5 |
归档态开关切「已归档」 |
请求带 archiveStatus 归档值,e2c-已归档 可见(只读消费) |
UI+NET |
| 6 |
saved-view:新建「e2c-dr-视图」→列表出现→选中查询→删除 |
save 为 JSON body;page 带 savedViewId;delete 后消失 |
UI+NET+DB |
| 7 |
形态偏好:overview 切看板→看板渲染→还原 list |
view-form/save 发出;看板列数=summary groups(字段 cnt/groupValue);汇总卡不再挪用 |
UI+NET |
| 8 |
新建表单:名称联想输入 |
company-lookup 触发(参数 companyName);NO_HIT 现象+STUB-LOOKUP 注记可见〔D〕 |
UI+NET |
| 9 |
名称查重流:建 e2c-dr-恒信达科技有限责任公司 变体 |
needConfirm=true + similarHits 含 masked 脱敏形态 → confirmSimilar 重发 → 创建成功 |
UI+NET |
| 10 |
编辑客户:回显(version CAS)→改备注→保存 |
edit?id= 成功;列表刷新生效 |
UI+NET |
| 11 |
详情头部:detail-head 渲染 + 金额卡 |
4 张金额卡恒"--"(P3-6 data-defect)〔D〕;计数/负责人/跟进摘要有值 |
UI |
| 12 |
8 页签全遍历可切换 |
信息/联系人/跟进/关联商机/关联项目/战略协议/团队成员/操作日志 8 页签 |
UI |
| 13 |
页签1 信息:16 字段栅格 |
系统信息四件套恒"--"(G4 data-defect)〔D〕;creditCode 脱敏形态断言 |
UI |
| 14 |
页签4/5:关联商机 7 列真名 + 关联项目恒"--" |
商机列头数=7(G2 data-defect)〔D〕;项目页签"--"(#42 占位) |
UI |
| 15 |
页签7 团队成员:添加 BUDDY→渲染→移除 |
member/add·remove 成功;无职务/加入时间列(G3 data-defect)〔D〕 |
UI+DB |
| 16 |
页签2 联系人:quickAdd 2 行→列表 8 列→编辑→reveal |
列表无负责人列(G5)〔D〕;reveal 明文+DB reveal_log;电话脱敏形态 |
UI+NET+DB |
| 17 |
联系人 batchEdit(含 D-G1 注记)+ check-phone + 删除 |
batchEdit 空串提交=不改(D-G1 注记可见)〔D〕;check-phone 命中王重复;删除双刷 |
UI+DB |
| 18 |
页签3 跟进:写跟进→日期分组→筛选器 |
follow_way 5 值下拉;follow/add 后分组出现;筛选请求带 followWay/时间 |
UI+NET+DB |
| 19 |
关注★/重点标记 + oplog 留痕核对 |
focus/unfocus+star/unstar;oplog 出现「新增客户/编辑/关注」行(流程闭环留痕证据);筛选带 action |
UI+DB |
B · 重流程闭环(步 20-25)
| # |
步骤 |
断言 |
型 |
| 20 |
客户导入三段式:模板下载→上传预检→确认→轮询→失败明细 |
预检计数 INSERT 行缺省份列即 FAIL(P1-1 已修复形态);DONE 计数=预检;失败明细行数吻合 |
UI+NET+DB |
| 21 |
导入任务列表 + status 过滤 |
import/page 渲染;请求带 status/importMode 参数 |
UI+NET |
| 22 |
联系人导入三段式(cimp 弹窗,含 P3-3 注记〔D〕) |
预检→确认→轮询→失败明细;无「触发校验规则」复选框〔D〕 |
UI+NET+DB |
| 23 |
商机联动链:详情发起建商机(POST /api/opportunity 预填 customerId)→抛公海被拒→关商机→放行 |
建商机成功;release-pool 吃 67007 toast(4xx 弹窗通道验证);关闭后抛公海成功 |
UI+NET+DB |
| 24 |
交割两段式:preview(原因三选)→initiate→page(JG* 编号)→detail→assignable→assign 单行 |
每步请求发出;详情明细行处置态变化;零成本夹具(不动 e2c- collab) |
UI+NET+DB |
| 25 |
归属动作族:claim-batch→assign-batch→(抛公海已在 23)归档→恢复→再归档收尾 |
各 batch 端点 BatchResult 呈现;archive 后列表归档态可见;oplog 留痕 |
UI+NET+DB |
C · 规则族(步 26-29)
| # |
步骤 |
断言 |
型 |
| 26 |
查重设置:读→改阈值 90→save→再读生效→还原 |
GET/POST dedup 各 2 次;还原后值=原值 |
UI+NET |
| 27 |
查重试玩面板:check-name 命中 e2c-恒信达 |
命中行 masked 形态;信用代码查重 67003 toast(L3 硬拦通道) |
UI+NET |
| 28 |
超期提醒:读(30/7)→save 非法 0→64023 toast→还原 30/7 |
64023 校验弹窗(4xx 通道);还原后 GET=30/7 |
UI+NET |
| 29 |
公海池配置占位卡只读(POOL-CFG)〔D〕 |
占位卡存在+禁用态+角标 |
UI |
D · 缺陷现象步(步 30-36,全部按 06 号票设计断言)
| # |
步骤 |
断言 |
型 |
| 30 |
顶栏「已知缺陷」面板打开 |
[data-defect-panel] 存在;A 区条目≥14、B 区 4、C 区 14、D 区 1;固定声明可见 |
UI |
| 31 |
角标钩子扫描 |
[data-defect] 计数≥12(G1-G6/P3-3/P3-4/P3-5/P3-6/D-G1/I-06/POOL-CFG/STUB-LOOKUP) |
UI |
| 32 |
I-06 双现象注记(pool workspace) |
pool 汇总条注记文本含「67001」+「记忆成功」;pool 形态下拉无 board 选项 |
UI |
| 33 |
豁免入口不出现 |
换负责人按钮/操作日志导出/完整金额开关/导入触发校验复选框 count=0 |
UI |
| 34 |
G 系列现象复核(合并断言) |
跟进筛选无操作人项(G1)、商机 7 列(G2)、成员 2 列缺(G3)、四件套"--"(G4)、联系人无负责人列(G5)、联系人日志空态(G6) |
UI |
| 35 |
金额卡与页签5 "--" 口径 |
P3-6 四卡"--";关联项目页签"--" |
UI |
| 36 |
company-lookup NO_HIT 现象 |
表单联想无命中提示+F6 批量更新按钮 stub 文案 |
UI |
E · 网络层全局 + 清理(步 37-40)
| # |
步骤 |
断言 |
型 |
| 37 |
console/pageerror = 0 |
errors 数组空 |
NET |
| 38 |
零 PUT/DELETE |
api_urls 无 PUT / DELETE 前缀(ADR-0017;saved-view save 走 POST+JSON 也合规) |
NET |
| 39 |
端点覆盖广度 |
api_urls 唯一路径数 ≥ 50,且覆盖矩阵「新增 9 + 改造 16」涉及端点全部触发(清单内置) |
NET |
| 40 |
夹具正门清扫 + 偏好/规则还原核对 |
e2c-dr* DB 删净;view-form=list、dedup/reminder=原值复核 |
DB |
报告形态(PASS/FAIL 统计口径)
{
"summary": {"total": 40, "passed": 40, "failed": 0, "passRate": "100%", "startedAt": "...", "durationS": 0,
"verdict": "PASS", "verdictRule": "全部步骤 ok 即 PASS,任一 FAIL 即 FAIL"},
"steps": [{"step": "...", "ok": true, "note": "...", "defect": null|"<data-defect id>"}],
"errors": [],
"api_urls": ["GET http://...", ...]
}
- 落点:
demo/smoke-report.json;截图 demo/shots/*.png(关键步骤 10± 张,全页)。
- 台账联动:FAIL 步骤附重现要点(步骤号+note),供缺陷票引用;〔D〕步 FAIL = 「现象未按设计呈现」,属 Demo 实现缺陷非后端缺陷,注明区别。
- 控制台尾部打印
==== summary ==== N steps, M failed + ALL_PASS: true/false(t04 口径)。