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.
114 lines
9.8 KiB
114 lines
9.8 KiB
|
2 days ago
|
# 冒烟步骤表(票 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 步),覆盖三族闭环 + 缺陷现象断言 + 网络层全局断言。
|
||
|
|
|
||
|
|
## 运行方式
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 前置(冒烟不自起服):
|
||
|
|
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 统计口径)
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"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 口径)。
|