@antprofuse/saddle-islands-minifish-test 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +127 -0
- package/package.json +21 -4
- package/references/blackbox-runtime.md +68 -0
- package/references/islands-miniapp-case-tree.md +62 -0
- package/references/native-miniapp-validation.md +141 -0
- package/references/semantic-anchors.md +33 -0
- package/references/test-design-review.md +77 -0
- package/README.md +0 -3
package/SKILL.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: saddle-islands-minifish-test
|
|
3
|
+
description: 基于 Islands Spec、Prototype、正式physical输入和 backend-contract 建设 Minifish 的 Playwright 黑盒端到端验收,交付可运行测试及必要测试接入,同时验证实际后端请求与页面结果。不负责产品业务实现或后端内部单测。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Saddle Minifish Test
|
|
7
|
+
|
|
8
|
+
先完整阅读本轮冻结的 saddle-islands-workflow 及本 Skill 原始包。按 workflow 的传播规则消费已提交并推送的 Git 包,核仓库、完整 commit、版本和逐文件摘要;同批保持一致,运行中不静默替换。npm 仅作发布备份,不要求安装 latest 或等待 registry。缺失正文或引用文件须修复交接,不能凭版本号相同认定内容一致。
|
|
9
|
+
|
|
10
|
+
测试覆盖建设先于且独立于产品研发,Spec 与 Islands 是覆盖设计输入,产品代码和历史测试不是覆盖设计输入。交付的是小程序端实现之前即可编写的验收脚本:真实页面打开与操作 → 小程序端实际发起 backend-contract 请求 → 严格请求断言及 Mock 响应 → 页面结果与交互。小程序端交付目标之一是通过这些测试,而不是让测试追随当前代码。
|
|
11
|
+
|
|
12
|
+
## 最小输入
|
|
13
|
+
|
|
14
|
+
沿用用户已给出的业务范围与当前分支,缺失时只确认必要信息:
|
|
15
|
+
|
|
16
|
+
- Spec 项目位置(含 Prototype 及测试);Islands 仓库用于读取当前测试编译与表达语义。
|
|
17
|
+
- 当前Islands正式physical绑定、上游生成物与backend-contract位置;不要求补回历史adapt目录。
|
|
18
|
+
- 测试交付位置,默认 code/minifish-tests,与 minifish 并列。
|
|
19
|
+
|
|
20
|
+
不要求小程序端代码先完成,不要求 DB、profusecontract 内部实现或真实生产后端。测试目标是 Minifish 交付产物这个黑盒;测试建设方负责运行入口、平台接入、定位、Mock和断言的完整性,研发方负责使产品满足验收。不得把补齐自定义测试adapter或测试基准的工作转交产品研发。缺少平台资源可报告具体阻碍,但不能把未完成的测试设施称为完整交付。不在业务测试元数据中加入 repository/revision 等跨分支定位;使用当前输入内的路径、Spec 测试ID、Prototype语义定位及契约标识。
|
|
21
|
+
|
|
22
|
+
## 从输入推导测试
|
|
23
|
+
|
|
24
|
+
1. 通读范围内 Prototype、Spec 测试及相关实体/流程;读取当前物理输入的入口字段和映射、backend-contract 的请求、结果及失败定义。实现代码仅用于了解接入,不能作为预期结果的权威。
|
|
25
|
+
2. 只复用 Islands 正式测试组织数据:目录、原始ID、目标及来源。通过实际支持的清单/详情接口核完整性;不转换或执行 Islands 生成步骤,也不等待其生成适用于小程序的准备代码。小程序准备、Mock、操作与断言由测试建设方基于 Spec 独立设计。
|
|
26
|
+
3. 以 Islands 正式测试目录、Case ID 和粒度建立唯一覆盖清单;目录与生成结果逐项核对,缺失、冲突、TODO 保留原 ID 并报告。原始责任不得增删或弱化,也不得用历史脚本反推分母。运行case可以按已确认策略在同一目录内合并相关责任;保留所有原ID到断言的映射。相同准备、请求返回、操作路径和目标状态下的关联内容/视觉/显隐责任,可在同一个case完整断言以减少重复启动与运行;先确定合并分组再实现,不强求合并数量。
|
|
27
|
+
4. 把原型的实体测试世界转译为物理入口和契约 Mock。保留业务意图,不把 db.insert、逻辑实体句柄或开场数据注入小程序端内存。一个后端聚合接口可以承载多个逻辑步骤,不要求一节点一请求。
|
|
28
|
+
5. 发现目录缺少边界、组合或交互时,记录准确来源与问题,交用户反馈 Islands 完善,不在本地增设另一套Islands业务case树。源目录未表达的、已明确要求的全局宿主验收可以作为项目补充回归独立登记与计数,不伪造官方ID,不扩大官方分母。目录内的断言和准备缺口按对应 Case ID 补齐,不自定业务语义。
|
|
29
|
+
|
|
30
|
+
原型自动样例若不满足物理契约,用合法数据保留测试意图,明确变换依据;无法保持意图则报告。Spec表达、Islands语义、契约和已确认用户决策冲突时,展示具体输入与不同预期,请用户确认该项,继续独立的已确定场景。
|
|
31
|
+
|
|
32
|
+
## 断言设计与复核
|
|
33
|
+
|
|
34
|
+
设计、复用或独立审查测试前,完整读取 [测试预期与持续复盘](<references/test-design-review.md>)。先从输入确定“什么是正确结果”,再选择定位与断言;既有全绿不能充当正确性依据。将语义责任、实际承载层、数量/显隐/行为及可观察证据补入现有覆盖关联,不另造平行真源。
|
|
35
|
+
|
|
36
|
+
对平台原生壳、业务页面与外部组件组合后的用户可见结果做验收。一个逻辑元素由谁承载必须明确,不能只在业务 frame 内找同名文本,或把原型模拟的导航壳重复实现为业务 DOM。唯一性针对语义角色和当前状态,不是全局禁止相同文案。关键断言须用有针对性的错误结果证明会失败,合法替代承载须仍可通过。
|
|
37
|
+
|
|
38
|
+
## 独立公共工具与阶段交接
|
|
39
|
+
|
|
40
|
+
使用本轮冻结的独立工具集Minifish公开入口及随附说明,完成编译、插件构建、运行、批次和报告。工具实现不放在Skill或业务case中;项目只维护业务准备、Mock、源投影和受控适配。公开能力尚未交付时明确缺口,不能另写平行执行器或报告器。
|
|
41
|
+
|
|
42
|
+
工具来源与文件清单由使用方外置冻结,运行前核完整身份;依赖与插件制品须按公开说明预检,缺失不能等批量启动后才发现。使用工具默认并发与采集策略,偏离须遵守其显式参数和原因记录;资源证据与业务断言失败分别判断,不凭个人习惯改成串行或重复整批运行。
|
|
43
|
+
|
|
44
|
+
配置显式给出项目根、产品、SDK、所需插件、观察模块、适配根和仓外输出。公共工具不含业务路由或期望默认值;业务case不得绕过公开观察接口进入DOM或产品内部。接入失败归因后交对应公共维护者,仅暂停受影响集合。
|
|
45
|
+
|
|
46
|
+
单Agent承担多个阶段也需保留相同职责边界和交接。测试准备与期望问题由测试阶段处理并审查整批同因,产品失败交产品研发自主运行修复,跨批执行与断言机制交公共工具维护者。测试交付等待产品消费,不修改产品答案,也不把设施通过当产品通过。
|
|
47
|
+
|
|
48
|
+
## 用例与设施的组织
|
|
49
|
+
|
|
50
|
+
以物理目录承载 Islands 按对象组织的正式测试树,保留有区分度的名称。目录可以同时包含当前目标的 case 和子目录;同层不自行推定互斥。manifest 将原 Case ID、源目录、维护文件、生成文件与断言关联起来,是唯一索引;公式视图不重复计数。
|
|
51
|
+
|
|
52
|
+
父目录维护真正公共的可执行准备片段。请求期望与该次返回、失败或等待定义同处一个片段,不把父请求与子响应拆开。子目录只继承准备,不继承父 case 的断言;当前 case 仅断言其明确承接的正式目标,父目标由父目录对应 case 覆盖。
|
|
53
|
+
|
|
54
|
+
生成阶段展开完整祖先准备、数据及资源依赖,输出一 case 一运行文件的独立制品。生成结果不手改;运行时不遍历父目录、不加载整个 Spec 库、不依赖其他 case 的执行或结果,不从共享循环隐式注册多个 case。公共 runner 与目标配置须显式声明。完整 Mock 计划须在页面打开或相关触发前安装。
|
|
55
|
+
|
|
56
|
+
业务准备与目标断言留在维护树;通用平台接入、协议校验和设施自检由独立工具集提供,项目harness只保业务薄接入。自检不计业务 case。具体规则读取本 Skill 的 [Islands 目录与独立 case](<references/islands-miniapp-case-tree.md>)。
|
|
57
|
+
|
|
58
|
+
## 每条功能测试的结构
|
|
59
|
+
|
|
60
|
+
- **MOCK / EXPECT REQUEST**:独立声明预期 operationType、请求字段和值、必要调用顺序/次数及可控响应;检查夹具合法性。
|
|
61
|
+
- **ACT**:通过真实产品页面打开/用户操作进入目标场景;不直接调用 service、hook、页面方法或渲染函数。
|
|
62
|
+
- **ASSERT**:证明预期请求真的发生、无非预期请求,再验证当前 Case ID 声明的目标结果、适用显隐和交互状态,不重复祖先 case 的业务断言;不能只测 Mock 函数本身。
|
|
63
|
+
|
|
64
|
+
请求规则必须包含:漏调用失败、错误接口失败、字段缺失/多传/改写失败、系统身份不得被擅自加成业务入参。响应 Mock 不得容忍所有请求后统一返回成功。调用记录独立于应用异常处理保存,即使应用吞掉 Mock 抛错,最终断言仍失败。无效入口可以预期零调用;这是端到端边界验证,不能为凑调用制造非法请求。
|
|
65
|
+
|
|
66
|
+
请求次数来自具体场景的明确预期,不将某业务一次查询的约定写死到所有业务。逻辑请求与传输重试分层说明,不以宽泛允许重复请求掩盖多发,也不擅自禁用已声明重试。
|
|
67
|
+
|
|
68
|
+
按当前 case 正式目标验证数据消费、相斥分支、缺失信息、正常/空/失败等适用责任,不机械给每条 case 添加整页断言。期望值不得调用小程序端生产格式化代码计算。单次请求响应与端到端链路之间保留可核对证据。
|
|
69
|
+
|
|
70
|
+
## 测试与环境的边界
|
|
71
|
+
|
|
72
|
+
已有平台能力时优先复用;测试侧负责实现并验证真实入口打开、真实元素定位、全部后端业务调用拦截、生命周期完成等待、测试隔离与清理,而不是只定义接入接口。可以使用官方模拟器和标准平台导航能力,不调用产品内部service或注入业务session。不得假称自定义adapter是Minifish已有接口,不在测试设施里代替业务实现、改写实际请求或构造假产品页面。
|
|
73
|
+
|
|
74
|
+
Minifish Web模拟器可能包含 minidev、lyra 与业务页面 frame。定位当前实际frame,不从工作台顶层随意查找;端口、地址和私有传输封装以实际宿主为准,不写死。原生导航可由模拟器真实控件承载,元素语义对应 Prototype,不强制小程序端代码结构。
|
|
75
|
+
|
|
76
|
+
接入官方Web模拟器时读取 [<references/blackbox-runtime.md>](<references/blackbox-runtime.md>),按当前平台验证实际传输、导航和隔离。交付地址/运行命令是正常测试目标配置,不是让产品研发实现测试adapter。
|
|
77
|
+
|
|
78
|
+
缺宿主、页面不可达、定位有歧义或基准图缺失应明确失败,不能 silent skip 或自动生成预期来通过。等待以实际调用、页面状态和受控响应为依据,避免固定 sleep 与无效的空 settle。
|
|
79
|
+
|
|
80
|
+
## 覆盖与交付判定
|
|
81
|
+
|
|
82
|
+
区分三种证据:脚本/夹具/工具自检通过、真实Minifish加Mock后端的端到端通过、真实后端联调通过。第二种证明从实际页面到后端契约边界内的小程序端功能,不能证明服务商选择、真实外部调用、DB读写等后端责任;真实后端尚未实现不阻塞此阶段。对跨层Spec测试标出小程序端投影与后端剩余验收,不删除责任也不冒充全量覆盖。
|
|
83
|
+
|
|
84
|
+
原型包含隐藏布局、无障碍或视觉责任时一并处理。先看具体断言,不能因为用例名称含“基线”就添加像素快照门禁;组件存在/唯一、内容、显隐与无障碍可以是其完整责任。本策略不采用像素对比;不能拿待验收实现的当前截图自动批准为预期。截图证据与像素验收明确区分,既不遗漏输入责任,也不添加无依据的交付阻碍。
|
|
85
|
+
|
|
86
|
+
交付包含:可执行的Playwright场景、契约Mock与请求守卫、来源覆盖映射、运行配置、已实现的黑盒测试接入和必要基准。独立验证测试设施正反例;设施可运行不代表当前产品通过,产品失败也不能掩盖设施缺陷。过程问题放用户指定协作位置,正式目录仅保留持续维护的测试交付物。
|
|
87
|
+
|
|
88
|
+
静态检查至少验证脚本发现、夹具、来源映射及请求守卫反例(错误操作、缺参、多参、错值、重复/漏调用)。这些是测试工具自检,不能计入业务端到端通过数。最终给出实际运行范围、覆盖缺口、待确认项、未运行原因和供Minifish研发消费的文件树。
|
|
89
|
+
|
|
90
|
+
交接给产品研发前,逐项核对原始目标是否落成具体页面断言,而不只核对来源ID。共享断言可以复用,但每个场景必须有独立预期,能检测该场景正式目标所声明的错误,不额外继承祖先断言。不得以截图附件代替内容/行为断言,或以测试数量代替断言完备性。
|
|
91
|
+
|
|
92
|
+
测试目录提供可直接执行的安装、设施自检、全量运行和单用例运行命令,以及必要目标配置。真实产物可用时运行完整套件;尚无产物时可先编写测试并完成静态自检,但明确接入实测待完成,由测试建设方继续跟进。报告区分产品失败、设施失败和未执行到的断言,不以放宽预期、跳过用例或补造业务输入解决产品失败。业务agent依据本Skill完成测试交付,Minifish研发使用其作为实现输入和验收条件;测试缺陷仍由测试建设方修复。
|
|
93
|
+
|
|
94
|
+
按项目仓库权限提交;Skill源码维护不隐含发布授权。仅从已确认规则沉淀通用规范,业务未决值不得进入Skill默认值。
|
|
95
|
+
|
|
96
|
+
运行证据与测试源码分离:报告、截图、trace、实际请求/结果及临时数据默认写仓库外的本地目录,不打包、不提交源码仓库。提供显式输出位置,失败与中断也遵守;不能只靠 gitignore 把它们留在交付目录。需要人工 review 时汇总逐用例终态截图、断言与请求结果;本地文件预览场景优先自包含 HTML(内嵌图片及证据),不依赖报告服务或跨 workspace 文件路径。未执行到终态的用例如实展示失败阶段,不借用其他截图。截图报告不能代替可执行断言。
|
|
97
|
+
|
|
98
|
+
报告生成复用本轮冻结的公共工具入口;测试批次、产品研发和独立报告任务都不得另写平行 HTML 渲染器或重新实现截图关联、计数与结果判定。需要筛选、聚合或新增展示时,先使用公共入口已有参数;任务要求与公共输出形式或能力冲突时,先列具体差异交Owner确定取舍;不得自行替换公共实现,也不得默默降低交付要求。确认能力缺口后由唯一公共工具负责人扩展,并保留其他消费者的兼容性。交付须记录实际生成入口、工具 commit 和输入收据身份,Owner核实入口实际被使用,不能仅凭报告外观或文件存在验收。通过网页或反代交付时,检查所交付路径下的图片加载/解码、收据链接及筛选;本地 file:// 校验不能代替 HTTP 子路径访问校验。出现资源寻址问题只修报告交付,不重跑已认证业务用例。
|
|
99
|
+
|
|
100
|
+
## 契约身份交接
|
|
101
|
+
|
|
102
|
+
消费本轮冻结的 saddle-islands-design 原始包中的后端契约格式,以及独立工具集随附的语义身份规范。契约 identity/id 由设计工具生成,研发/测试不得重新命名或自行实现摘要。读取同版本只追加登记表,校验全部当前契约及可信 Git 基线;不同页面语义起点独立契约,同起点可聚合。旧项目未批准迁移时保留原交付,不混用当前格式规则。
|
|
103
|
+
|
|
104
|
+
后端契约不再包含 coverage。测试阶段直接消费 Spec 正式起点、分支及结果与契约身份,按 Islands 正式目录建立覆盖清单与测试关联;不得从契约内旧 coverage 或既有脚本反推分母。case 定义与覆盖策略遵循共同规则;身份算法不在各测试包内重复实现。
|
|
105
|
+
|
|
106
|
+
## Islands 目录覆盖策略
|
|
107
|
+
|
|
108
|
+
完整读取本 Skill 的 [Islands 目录与独立 case](<references/islands-miniapp-case-tree.md>)。不采用后端 case 的本地归一化、组合削减或人为中断拆分规则重新设计小程序端目录。每个正式 case 由一个编写者负责其准备和目标断言,公共片段与设施各有唯一维护者;任务开始前明确具体 ID 集合、文件范围、依赖与交付检查。
|
|
109
|
+
|
|
110
|
+
目录承接完整性、当前 case 断言充分性、实际运行结果分别报告。没有产品也能建设和审查覆盖;设施自检不冒充业务通过,业务未运行不代表目录不存在。父 case 的责任覆盖不形成运行依赖。
|
|
111
|
+
|
|
112
|
+
## 原生组件与原型目标
|
|
113
|
+
|
|
114
|
+
新建或迁移定位时读取 [专用语义锚点与公共观察能力](<references/semantic-anchors.md>)。统一以Spec目标路径声明 `data-anchor-id`,case只使用公共能力,不自行定位DOM;平台桥接集中维护。既有运行批次按固定输入完成,在明确迁移点接入。
|
|
115
|
+
|
|
116
|
+
处理原型到原生组件的实现或验收时,读取本 Skill 的 [原生小程序断言方法](<references/native-miniapp-validation.md>)。该文包含按目标选择断言的操作表、rpx 独立换算、无盒包装、真实图片收据、滚动与遮罩等待规则,编写断言前必须消费;不重新试出已验证的基本方法。逐元素交接源条件、原生承载和可执行观察;设施用正负例自检;产品可用时用正式清单内对应 case 验证接入,产品未就绪不阻止独立测试定义建设。原型 HTML 实现树不作为小程序组件合同,单例通过不代表其他 case 通过。 业务控件不得依赖 HTML 标签定位:新策略通过公共工具解析专用语义锚点,再验证实际角色与承载;显示与隐藏定位须防错文案漏检,按参考中的原生承载正负例验证后交接。
|
|
117
|
+
|
|
118
|
+
## 平台当前用户的测试边界
|
|
119
|
+
|
|
120
|
+
需要当前用户比较的场景,沿本轮固定 `saddle-islands-minifish` Skill“当前登录用户的平台接入”使用已确认的 `my.getUserInfo` / `my.ap.getUserInfo` 能力。公共Mock拦截实际宿主 `getUserInfo`,按SDK合同校验业务参数并返回包含 `userId` 的结果;记录真实调用与回调消费,不把身份直接注入页面内部。只有源要求身份参与的分支才设置对应调用计划。
|
|
121
|
+
|
|
122
|
+
本人/他人由入口分享身份与Mock平台userId的关系构造;源存在优先分支时保留优先次序。Mock返回不证明真机权限,权限未验证不等于没有接口。后端请求的可信身份不因测试方便加入业务payload,authCode不能替代userId。不得把已确认的平台能力每轮重新列作待设计问题。
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
## 统一交付门禁
|
|
126
|
+
|
|
127
|
+
交付前必须使用本轮指定的公开工具入口执行交付门禁;门禁未通过,不得作成功交付。保留实际结果到本地任务信息目录,失败按责任修复后重新执行。具体检查项及参数由冻结工具版本提供,见 `tools/docs/iteration.md`,任务不重复列举或自行裁剪检查项。
|
package/package.json
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antprofuse/saddle-islands-minifish-test",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "基于Islands正式输入与后端契约建设Minifish小程序黑盒测试,消费独立公共工具,不实现产品或Web前端测试。",
|
|
5
|
+
"license": "MIT OR Apache-2.0",
|
|
6
|
+
"files": [
|
|
7
|
+
"SKILL.md",
|
|
8
|
+
"references",
|
|
9
|
+
"resources"
|
|
10
|
+
],
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public",
|
|
13
|
+
"registry": "https://registry.npmjs.org/"
|
|
14
|
+
},
|
|
15
|
+
"exports": {
|
|
16
|
+
"./package.json": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+ssh://git@code.alipay.com/profuse/saddle-islands.git",
|
|
21
|
+
"directory": "skills/minifish-test"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# 官方模拟器黑盒接入
|
|
2
|
+
|
|
3
|
+
此文记录已验证的接入方法,不规定业务路由、端口、应用ID或某个Minifish版本。接入新项目时核对实际产物与平台。
|
|
4
|
+
|
|
5
|
+
## 运行目标与导航
|
|
6
|
+
|
|
7
|
+
- 用交付项目自身的标准构建/启动命令产生真实产物,不能为通过测试改业务代码。读取产物manifest确认页面;模拟器地址及appAddress作为运行参数,避免将一次开发进程的clientId写入交付物。
|
|
8
|
+
- 官方Web模拟器支持浏览器worker和远程Node worker。若远程worker等待调试连接,应先验证平台支持的浏览器worker模式,不实现假业务页或绕过认证。
|
|
9
|
+
- 同一模拟器包含工作台、Lyra、业务页面和worker等frame。业务DOM在实际路由frame;原生返回等控件在Lyra导航frame。通过真实可见性确认当前页面,不能以任意已加载的历史frame冒充当前页。
|
|
10
|
+
- 可以调用标准平台navigateTo触发真实页面生命周期,并用真实导航控件返回。不得调用产品导出的service、内部路由函数,或注入session来补齐当前产品没有实现的入口。
|
|
11
|
+
- 浏览器worker可能裁剪全局类型,直接在其frame执行Playwright表达式会失败。已验证可由同源顶层访问平台my接口;这是平台驱动,不是进入产品模块。跨域时不能假定可访问,需核对平台支持的接入路径。
|
|
12
|
+
|
|
13
|
+
## 请求与响应
|
|
14
|
+
|
|
15
|
+
- 先用独立设施探针证明真实平台RPC确实发出了请求,以及Mock能经原回调返回。探针不计入业务端到端数。
|
|
16
|
+
- 从实际网络捕获和官方运行时代码确认封装,不能仅看到一份代理源码就假定运行时使用该路径。例如不同运行模式可能使用本地delegate或远程rpcProxy。
|
|
17
|
+
- 仅剥离已验证的网关封装,完整保留业务输入。网关target、接口标识及业务字段分别校验;不得先修正错误请求再比较。保留原始wire和解包后的调用证据。
|
|
18
|
+
- 跨域请求携带credentials时,Mock响应需准确Origin及allow-credentials,通配符不可用。Mock响应按平台要求封装,不把HTTP代理信封误当业务结果。
|
|
19
|
+
- 拦截必须覆盖页面启动前和用例全过程。非预期业务出网失败,禁止落到真实生产服务;框架资源白名单需限定来源与读取方式。被有意阻断的遥测与真正业务越界分开记录。
|
|
20
|
+
- 错误、重复、缺失调用必须由测试自己的记录判定,不依赖应用是否抛出异常。即使无请求也应在证据中看到预期接口、完整输入和数量。
|
|
21
|
+
|
|
22
|
+
## 元素与完成判定
|
|
23
|
+
|
|
24
|
+
- 按 semantic-anchors.md 的专用 data-anchor-id 合同定位真实承载,产品声明身份,测试公共适配器负责读取;不要求按原型HTML拆出额外实体。例如户号、分隔符、户名可以组合成一个文本节点,但必须明确该组合承接的源目标和观察范围。
|
|
25
|
+
- 缺字段、隐藏不占位、真实值消费、唯一组件应有相应断言;定位未实现不能作为产品失败隐藏。
|
|
26
|
+
- 响应等待、受控悬挂响应、页面渲染稳定、返回后的页面身份分别验证。固定sleep或空settle不能提供完成证据;基于网络结束和DOM稳定的屏障仍须配合最终业务断言。
|
|
27
|
+
- 迟到响应测试必须先建立旧请求确实发出、新请求确实完成,再放行旧响应,检查完整新结果和调用记录。
|
|
28
|
+
|
|
29
|
+
## 原生壳与页面组合
|
|
30
|
+
|
|
31
|
+
按测试的语义承载映射,同时观测当前页面的宿主导航、内容 frame 和实际外部组件;排除工作台、隐藏历史页与调试面板。页面标题、返回按钮等若由原生壳满足,不再要求业务 DOM 复制原型中的模拟壳。自定义导航也可能合法,以当前输入和平台配置核实,不能硬编码一律使用原生。
|
|
32
|
+
|
|
33
|
+
对声明唯一的角色统计所有实际承载位置,分别验证缺失、重复和正确单一承载。不能用 `.first()`、任选 frame 或只查业务 DOM 消除歧义;输入明确的有序集合首项是另一种语义,应单独注明依据。跨 frame 几何关系使用共同坐标系,存在、唯一、遮挡、内容与交互是不同断言,不能互相代替。原型样式仅约束其实际负责的视觉责任,不把 HTML 模拟壳的字体、节点结构强加给平台原生控件。
|
|
34
|
+
|
|
35
|
+
设施反例可在独立宿主夹具构造重复/缺失,不注入或修正待验产品。至少证明本次采用的观测能识别错误承载;宿主不可观测时明确该责任未验证,不能改查内容页冒充完整结果。
|
|
36
|
+
|
|
37
|
+
## 设施自检与交付
|
|
38
|
+
|
|
39
|
+
至少独立验证平台RPC往返、错误请求记录、导航/返回及清理。若当前产品因未完成入口而使业务用例在“请求未发生”处失败,记录实际执行到的阶段,不声称其后断言已经验证通过,也不能通过修改测试入口跳过产品缺陷。
|
|
40
|
+
|
|
41
|
+
测试可完整交付且当前产品不通过;反之,脚本可发现、Mock夹具正确并不代表测试设施完整。报告分别给出设施自检、业务用例执行结果以及仅后端才能证明的剩余责任。
|
|
42
|
+
|
|
43
|
+
## 批量运行与自动报告
|
|
44
|
+
|
|
45
|
+
使用冻结独立工具集的公开batch入口;项目薄入口只转交显式配置,不复制执行器。交接提供工具来源、输入清单、产品/测试摘要、锁定依赖及工作目录。参数与调度行为由工具随附说明定义,不假定每个项目有自己的run-batch脚本。
|
|
46
|
+
|
|
47
|
+
- 批量执行不改变case独立性。每case有完整准备、Mock、断言、结果与清理;worker复用宿主时,需证明退出、held请求、页面与会话不会污染后续case,worker间隔离并回收进程。并发有上限,按已验证能力与资源设置,不以更多agent代替运行工具。
|
|
48
|
+
- 普通case失败后继续收集其他独立case;输入漂移、缺失/错误结果、超时或清理失败分别记录,不能被其他通过结果掩盖。区分真实业务失败与运行设施失效。
|
|
49
|
+
- 正式运行前冻结测试、产品和本轮依赖;源码指纹可能包括自检与说明文件,运行中同样不能修改。修改后用新批次及新摘要,不覆盖旧证据。先完成全部登记定义的编译兼容检查,公共边界限制不得误伤历史case。
|
|
50
|
+
- 优先复用已核验依赖、未改变的独立包及有效设施结果。按代码变化、失败修复与影响范围决定复验,不为统计额外重跑。记录总墙钟、启动/构建与case运行耗时(可获取时),不累加重叠时间声称提速。
|
|
51
|
+
- 工具统一生成机器结果和HTML。截图模式支持关闭、仅失败和全部;过程默认关闭,最终按任务要求开启。仅失败模式通过后删除暂存图,失败保留;进程崩溃或超时未取得图须如实说明。图片采集异常单列,不伪装业务断言失败或静默通过。
|
|
52
|
+
- 多图报告按树目录及case身份索引,直接消费实际收据,显示失败、未运行和认证失效。HTML可内嵌原图及结果以避免文件通道相对资源失效;高清图按逻辑尺寸显示,不降采样原图。通过workspace文件通道交付;结果、截图、日志、审计及临时包不进Git。
|
|
53
|
+
- 报告中执行case数与Islands原始ID覆盖数分开;按原ID映射去重,不因合并或并行改变覆盖分母。旧包不支持新截图协议时按源码重建,不临时改业务定义。
|
|
54
|
+
|
|
55
|
+
原生自定义组件依赖还需通过平台编译器的项目根目录检查;Node能resolve包不代表SDK能加载。隔离worker若将依赖符号链接指向根目录外,应在运行前核官方解析行为。必要时将锁定版本的原始包内容物化到worker项目内并核hash,不能修改SDK或替换组件实现来绕过限制。
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## 公开回调消费的接入完整性
|
|
59
|
+
|
|
60
|
+
新增原生API Mock时,一次核对拦截、响应投递、实际回调观察及独立包闭包。若观察器分别登记直接方法与 `my.call`,两种实际支持的调用形式必须同步登记,并用控制证明原参数、响应、this及返回值保持;未触发回调不计消费,未知API不得自动放行。
|
|
61
|
+
|
|
62
|
+
收到请求、投递响应、客户端回调消费是三份不同证据。后续业务调用已发生而消费计数为零时,先核观察器是否遗漏该公开接口;不能直接判产品未消费,也不能用后续调用推算消费或关闭 `requireConsumption` 求绿。源没有注册回调时只要求实际请求与投递;源明确等待回调时必须记录真实回调身份、结果及成功/失败类型。精确设施修复后仅复验受影响case。
|
|
63
|
+
|
|
64
|
+
## 目标平台能力与准备能力分开
|
|
65
|
+
|
|
66
|
+
平台API是否需要真实宿主效果由当前正式目标决定。非目标的准备调用可以沿用严格请求/响应Mock;不能为验证另一个目标,顺手把全部准备升级为真实平台委托,导致原先合法可达的case被新增设施依赖阻断。目标本身要求弹层、滚动或加载效果时,仍必须观察官方真实载体,Mock回调不能替代效果。
|
|
67
|
+
|
|
68
|
+
遇到零调用,先查该次执行实际停在哪个准备步骤;未到达目标不能证明目标平台接口不支持。既有SDK探针、公开方法与my.call桥接的结果分别保留,不把一种调用路径的失败推广到另一种。
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Islands 目录与独立 case
|
|
2
|
+
|
|
3
|
+
## 设计输入与目录
|
|
4
|
+
|
|
5
|
+
先建设测试覆盖,后消费测试进行产品研发;两者是独立工作。覆盖设计只消费 Spec 与 Islands 正式测试输入。产品代码、历史测试和历史运行结果不能决定树、case 数量或预期。
|
|
6
|
+
|
|
7
|
+
直接使用 Islands 正式目录、Case ID、分支与公式粒度。物理目录表达按对象组织的逻辑树,名称清晰且有区分度;目录可同时包含 case 与子目录。内容、状态、视觉等原始责任各保留身份;同一 ID 的其他分类视图只是索引,不增加责任数量。在同一明确目录范围内,准备条件、外部请求及返回、操作路径、目标状态相同的关联责任,允许合为一个运行case,避免为同一状态重复启动与准备。内容、视觉、显隐可以在该case内分别断言;不跨无关目录全局合并,不强求合并数量。合并与否在执行前明确;每条原ID映射到具体断言,不丢失原内容,原始责任数量与运行case数量分开报告。
|
|
8
|
+
|
|
9
|
+
建立唯一 manifest,映射原 ID、原目录、维护路径、独立运行文件及目标断言。文件名不是另一套身份算法;重名或路径转义须保留可逆映射。增量迭代比较正式输入中的新增、变更、退出 ID 与目标,按映射定位影响,不每次重新设计全树。源改名依 Islands 身份变化记录,不私自假定新旧 ID 等价。
|
|
10
|
+
|
|
11
|
+
目录缺失、冲突、生成失败或无法解释的责任保留原 ID,记录原始依据并交用户反馈 Islands。不得增删原始责任或做组合削减,也不得把工具缺口当成已覆盖;执行组织的可选合并不改变原始输入。历史 case 仅可供后续工程接入参考。
|
|
12
|
+
|
|
13
|
+
## 维护准备片段
|
|
14
|
+
|
|
15
|
+
父目录存共同的可执行准备,子目录追加自己的准备。外部请求的身份、参数、次数、必要顺序和该请求的返回、失败或等待定义是一组,维护在同一片段中。不同响应分支各自维护完整请求与结果,父目录不留下响应槽位。
|
|
16
|
+
|
|
17
|
+
准备只能按正式来源转译为公开输入、宿主事件、真实动作和边界 Mock;不能注入业务内部状态或复制产品算法。业务外部调用全部 Mock,素材读取按明确策略许可。未知业务请求失败,不自动兜底成功。目录层级不代表 Mock 注册时间:生成的完整计划须在页面启动或相应触发前安装,等待与交付按源时序执行。
|
|
18
|
+
|
|
19
|
+
## 当前目标与父目标
|
|
20
|
+
|
|
21
|
+
当前 case 只承担明确映射的 Islands 目标;合并case须承担其所有关联目标。祖先准备状态的业务断言由祖先对应 case 承担,子 case 不重复继承整套断言。准备执行需要的请求匹配、输入合法性与必要到达检查仍须有效,不能跳过失败准备而报告当前目标通过。
|
|
22
|
+
|
|
23
|
+
父目标有自己的覆盖是一种责任划分,不是运行依赖;任何 case 都不需要父 case 先运行、先通过或提供结果。中间状态在源指定时刻观察;等待状态按源定义终止,不强求所有 held 请求完成。请求计划核对与目标断言结果分别记录。
|
|
24
|
+
|
|
25
|
+
## 生成与独立执行
|
|
26
|
+
|
|
27
|
+
生成时展开全部祖先片段与当前准备,收集所需数据、预期和资源,产出一 case 一个独立运行文件及必要随附资源。运行只依赖自身制品、明确声明的公共 runner、平台及目标配置;不得遍历维护目录、加载整库 Spec、读取其他 case、临时任务路径或先前执行状态。生成文件不可手改,变更回到维护源再生成。
|
|
28
|
+
|
|
29
|
+
独立性自检:把一个生成 case 及声明依赖放入隔离目录,移除维护树与其他 case,验证发现、加载及计划构造仍成立。使用受控设施自检验证请求守卫、失败路径、资源依赖和断言负例;没有产品时这些证明测试设施,不冒充真实业务通过。正式执行每 case 建立并清理自己的会话、状态和 Mock 记录。
|
|
30
|
+
|
|
31
|
+
## 覆盖检查与任务交付
|
|
32
|
+
|
|
33
|
+
分别检查:
|
|
34
|
+
|
|
35
|
+
1. 目录承接:正式 ID 是否全部关联到具体断言,无遗漏及本地新增;一个运行case可关联多个原ID,未实现项仍在责任清单中单列。
|
|
36
|
+
2. 断言建设:每 case 的正式目标是否具有独立预期和具体可执行观察,未实现项明确登记。
|
|
37
|
+
3. 执行结果:每 case 独立记录未运行、准备失败、断言失败或通过;未到达断言不计验证。
|
|
38
|
+
|
|
39
|
+
原生语义适配用于落实目标,不复制原型 HTML 标签、整棵 DOM 或全 CSS。期望来自源,不能由待测实际值反推。截图用于最终结果查看,不替代断言;不引入像素比较。
|
|
40
|
+
|
|
41
|
+
派任务前列明具体 Case ID 集合、维护文件、准备片段所有者、公共接口依赖、独立输出和检查命令。一个 case 的准备及目标断言由一个编写者负责,公共片段单一维护;不能把模糊业务分类派下去边跑边补设计。产品研发不混入覆盖建设任务,也不以产品红灯阻塞可独立完成的测试交付。
|
|
42
|
+
|
|
43
|
+
## 隐藏责任与独立执行的已验证约束
|
|
44
|
+
|
|
45
|
+
隐藏不只指目标自身的隐藏开关,也可能由祖先进入其他分支造成。核正式目标及父分支依据,选择Spec中真实可达路径,并证明页面正常处于该分支;不能因为子组件未写隐藏条件就删除责任,也不能关闭浏览器或隐藏DOM冒充业务隐藏。不同父分支的准备不能强行合并成同一终态。
|
|
46
|
+
|
|
47
|
+
独立制品固定实际验证的依赖版本,case与公共runner使用同一Playwright实例;不能通过仓外源码import再加载第二套Playwright。打包必要运行模块与资源闭包,声明环境依赖。发现成功不代表执行成功,需真实小程序运行验证。
|
|
48
|
+
|
|
49
|
+
审计结果应显式写入仓外输出文件;不要假定任意reporter会持久化内存附件。图片和审计、日志、生成执行包不进入Git。内容断言通过不代表视觉对齐;对区域交付需汇总该区域全部适用目标,而不以单条标题测试或一张截图代替。
|
|
50
|
+
|
|
51
|
+
## 同状态合并的执行与计数
|
|
52
|
+
|
|
53
|
+
case合并与任务节点合并是两回事;用户要求case提效不能擅自改变任务并发划分。区域编写前列出每个运行case对应的原ID、共同准备、目标状态及逐ID断言。只同页或同标题不足以判定可合并;不同返回、等待阶段、隐藏父分支或互相干扰的操作仍分别执行。
|
|
54
|
+
|
|
55
|
+
原ID总账保持不变,运行case数量单独统计。合并case中前置或某条断言失败导致其他责任未执行时,未执行责任不能算通过;只有完成各自全部断言的原ID才有通过依据。可以收集独立视觉失败,但不得吞掉后续动作必需的硬前置失败。最终case仍是可独立构建、独立运行和复现的个体。
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## 原ID结果与执行完整性分列
|
|
59
|
+
|
|
60
|
+
账本同时保存原ID自身断言结果、准备/边界/清理状态及运行case整体结果。合并case某个独立目标失败,不应把其他已执行目标的观察事实覆盖为未执行;同样,目标局部通过不能掩盖无效准备、身份漂移或与其相关的请求边界失败。通过依据须说明本目标完整责任及其依赖已闭合,未能证明依赖独立时保未闭合,不猜测恢复通过。
|
|
61
|
+
|
|
62
|
+
汇总工具或计数政策变化时,保留前后逐ID转换与原因,区分真实行为退化、证据适用性变化和统计变化。报告将缺少定义、准备未到达、断言未执行及已执行失败分开,不能只用一个“未验证”数字驱动任务安排。
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# 原型目标到原生小程序验收
|
|
2
|
+
|
|
3
|
+
用于小程序研发、测试接入及视觉问题复核。业务依据当轮冻结 Spec;历史成功版本只证明基础工程接入可参考,不能提供旧业务期望。平台组件属性和事件须核当前官方 Skill 与实际安装版本,不把 Web 模拟器实现细节写成真机 API。
|
|
4
|
+
|
|
5
|
+
## 每个元素的双向交接
|
|
6
|
+
|
|
7
|
+
在既有覆盖关联中记录:源锚点与显示条件 → 固定 case 边界 → 预期文案/素材/状态 → 原生组件及属性事件 → 观察方式 → 运行证据及限制。按区域检查全部元素,而非只检查文字或由用户找漏项:
|
|
8
|
+
|
|
9
|
+
- 页面壳、区域顺序、滚动与安全区由实际宿主尺寸决定。原型模拟导航不重复绘制,不二次扣高度。
|
|
10
|
+
- 图片、文字、按钮使用平台组件承载;原型 HTML 标签、子 span、伪元素和整份 CSS 不是产品接口。保留素材、尺寸、裁剪方式、色彩及交互目标,选择有依据的原生实现。
|
|
11
|
+
- 文字既验内容与必要样式,也验容器内可见和不裁切。原生按钮默认高度可能与原型不同,样式值通过不能代替实际布局观察。
|
|
12
|
+
- 状态色、节点、连线及隐藏内容按该 case 条件投影,不拿静态模板默认状态当所有场景的期望。先区分有意背景叠层与正文遮挡。
|
|
13
|
+
- 列表验数量、顺序、空项和布局关系。正常滚动可用于验证同一终态的可达性;会改变业务状态的操作仍按 case 边界处理。
|
|
14
|
+
|
|
15
|
+
## 可验证的观察边界
|
|
16
|
+
|
|
17
|
+
先固定逻辑屏幕、宿主内容区和设计单位换算,再分别记录截图 DPR 与模拟器显示缩放。截图倍率不能用于更改产品字号。仅比较源明确的语义属性和布局关系;数值容差须有实际精度依据,不能泛化为视觉差异豁免。
|
|
18
|
+
|
|
19
|
+
原生 image 可能以宿主背景呈现,内部 img 隐藏不直接等于图片不可见。先核可见语义载体、预期 URL、实际尺寸和裁剪;加载证据优先消费平台公开事件。Web 模拟器可记录该页面该 frame 实际资源响应及原响应字节解码结果,与同一载体关联;它证明模拟器资源链,不能冒充真机 onLoad。单独 new Image(URL) 只能证明探针加载,不证明产品加载。使用缺失响应、错 frame、错误状态、不可解码等针对性负证据检验设施拒绝能力,不将设施负对照算成业务故障 case。
|
|
20
|
+
|
|
21
|
+
截图在断言时刻采集实际小程序区域,保留清晰原图和设备参数。人工截图复核与可执行断言、请求审计分别报告。输入未要求像素验收时不引入像素比较;不得用当前实现截图自动生成期望。
|
|
22
|
+
|
|
23
|
+
## 实跑及迁移
|
|
24
|
+
|
|
25
|
+
先选清单内具有代表性的完整 case,在真实产品和固定外部边界上验证适配,禁止以独立假页面或新造替身 case 结清原 case。独立检查可聚合错误,批量修同类问题;不要一字段一次完整构建。
|
|
26
|
+
|
|
27
|
+
迁移旧 HTML 断言前逐项列出源责任及原生替代观察,保留请求、内容、显隐与行为责任。一个 case 通过不代表共享 helper 所有调用方通过:按消费者和状态分批运行,失败区分产品、设施与源投影,未执行到的责任保留未验。平台设施由单一责任维护,完整业务 case 不按视觉/请求拆多人。
|
|
28
|
+
|
|
29
|
+
正式交付保留可运行的全套发现配置、显式冻结输入参数和仓外证据路径,清理临时诊断;每项结论写明源码、运行、人工确认或未验证的证据级别。不要把项目设备尺寸、业务文案、特定 rpx 数值固化成通用 Skill 默认值。
|
|
30
|
+
|
|
31
|
+
## 按当前 case 目标选择断言
|
|
32
|
+
|
|
33
|
+
先取 Islands 当前 Case ID 的目标及源位置,再确定当前路由、组件角色和循环实例。准备中的祖先状态不自动扩大目标范围;下表是观察方法,不要求每条 case 执行全表。
|
|
34
|
+
|
|
35
|
+
| 正式目标 | 原生观察与比较 | 必须避免 |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| 文本/金额 | 在准确语义对象内比较源预期文本;按目标另验数量、顺序 | 全页面找同文案;以 `h2/span/small` 标签或内部子节点存在作要求 |
|
|
38
|
+
| 显隐 | 检查实际语义承载;隐藏与不存在是否等价依源目标确定 | 用空 marker 存在证明展示,或用无布局盒的 body/包装父节点判整个页面隐藏 |
|
|
39
|
+
| 列表/循环 | 先按来源成员身份或准确业务字段选实例,再验目标的数量、顺序、内容;空图槽单独保留 | 将 native 占位节点算作业务条目;用 nth-child 假定 HTML 树相同 |
|
|
40
|
+
| 文字视觉 | 比较源声明的字号、字重、色、行高等必要属性;裁切目标另验文本与容器实际上下左右关系 | 全 CSS 相等;字号通过就声称无裁切;根据实际结果找一个更宽祖先来通过 |
|
|
41
|
+
| 区域布局 | 在共同逻辑坐标系检查源要求的顺序、边距、对齐、列数及容器包含 | 把所有背景重叠都判失败;要求原型与小程序 DOM 盒一一对应 |
|
|
42
|
+
| 原生图片 | 同一语义载体的 URL、尺寸、fit/裁剪与实际加载证据相互关联 | 强制隐藏的内部 img 可见;只有 CSS URL 或额外 new Image 探针 |
|
|
43
|
+
| 控件交互 | 真实 tap/click/input,独立核预定请求参数、次数、返回消费及当前目标 | 直接调用内部 handler、写 setData、强制派发事件绕过遮罩 |
|
|
44
|
+
| 进度/选中状态 | 以当前 case 固定状态或成员索引投影文字、颜色、节点及连线目标 | 拿原型静态默认节点样式套全部状态 |
|
|
45
|
+
|
|
46
|
+
`display: contents` 等无盒包装不会自动使子内容不可见,也不意味着包装上的全部视觉责任可跳过。把源责任对应到实际承载该责任的后代或容器;自身没有盒时,背景/边框等是否有实际承载须逐项有依据,不能 blanket skip。
|
|
47
|
+
|
|
48
|
+
## 原生控件定位:语义、身份与显隐分开
|
|
49
|
+
|
|
50
|
+
不要用原型 HTML 标签或其后代层级定位小程序业务控件,包括 `button`、`a`、`input`、`h2`、`span`、`small`、`img`。例如,已观察到官方 Web 模拟器将原生 `<button>` 渲染为 `<a role="button">`;这说明标签不是合同,不意味着所有版本固定渲染成 `a`,更不能把修复写成另一条标签选择器。
|
|
51
|
+
|
|
52
|
+
按 [专用语义锚点](<semantic-anchors.md>) 在正确页面实例内定位已声明目标,case不自行写定位器。公共工具可以在已定位目标上验证角色、可见文字和真实承载,但角色、样式类、文案不能替代目标身份。平台内部标签可用于公共适配器只读诊断或读取已定位目标的实际证据,不能成为业务目标存在的前提。
|
|
53
|
+
|
|
54
|
+
旧区域/角色定位只是既有适配方式,不是新策略默认合同;迁移保留原目标和断言,先验证真实平台与受影响消费者,不中途改变活跃运行输入。
|
|
55
|
+
|
|
56
|
+
- 当前目标要求隐藏时,复用同一目标身份,并包含隐藏候选,再按源规定断言隐藏或不存在。不要用默认排除隐藏元素的查询证明真实目标已找到,也不要只凭“预期文案没有匹配”宣布隐藏:文字错了但控件仍可见,必须失败。
|
|
57
|
+
- 不用 `.first()`、任意宽容祖先或全页面同文案查询消除重复/定位歧义。需要命名过滤时,区分目标身份与待验证文案;精确文案过滤不能掩盖目标错字或额外重复实例。
|
|
58
|
+
- 显示与隐藏共用的定位器须有针对性控制:真实平台合法原生承载可以定位;可见目标缺失、重复或文案错误被相应断言拒绝;隐藏场景下目标仍可见(包括文案错误)也被拒绝。不得只以 HTML `button` 替身通过证明原生定位有效。设施替身仅验证拒绝能力,真实平台接入仍用正式 case 核验。
|
|
59
|
+
- 真实交互继续使用同一定位,保留正常输入等待、真实点击及请求/响应审计。定位修正不能删除视觉、可用性或行为责任。
|
|
60
|
+
|
|
61
|
+
公共定位或快照新增分支时,以已有真实消费者的公开载体形态建立控制,并对照原公共定位合同,而非只用为新实现构造的替身自证。约束省略不等于约束为空;显式实例、未指定实例、唯一与多匹配的接受/拒绝语义须在采样和后验一致。选择语义与字段/几何采样等价分开核验,字段全等不能证明选中了正确目标。
|
|
62
|
+
|
|
63
|
+
零匹配先检查实际承载和查询范围。只有确认定位适配正确后,才能把目标缺失归为产品错误;未到达的后续断言报告未验。交接中提供实际原生承载证据及正负控制结果,使产品节点不用再次猜测测试定位。
|
|
64
|
+
|
|
65
|
+
## rpx 期望的独立推导
|
|
66
|
+
|
|
67
|
+
产品自定义字号及固定长度按已确认 rpx 规则实现;测试读取的 computed style 和几何可以是逻辑 px。百分比、auto、flex、安全区等布局语义不机械换成长度常量;不得修改 SDK 输出单位求通过。
|
|
68
|
+
|
|
69
|
+
1. 源明确给出 `R rpx`:直接保留 R,运行期望 `E = R × W / 750`。
|
|
70
|
+
2. 源只有设计长度 D,且设计基准宽 B 明确:先得 `R = D × 750 / B`,运行期望 `E = D × W / B`。
|
|
71
|
+
3. W 必须取实际小程序逻辑宽度;不是截图像素宽、DPR、模拟器外层缩放或桌面窗口宽。B 来自源,不同区域不得混用;缺 B 就报告缺口,不猜全部乘二。
|
|
72
|
+
4. 比较数值而非 CSS 字符串。序列化误差和布局量化误差分开验证;没有证据不能统一放宽 1px 或按百分比容错。
|
|
73
|
+
|
|
74
|
+
例:源基准 B=375、字号 D=16,对应 32rpx;W=402 时为 17.152 逻辑 px。这是换算例,不是全项目默认字号/设备配置。源已写 32rpx 时不经 HTML 渲染再反算。
|
|
75
|
+
|
|
76
|
+
换算设施须拒绝固定 px 不缩放、重复缩放和错误设计基准;以至少两个逻辑宽度验证换算能力,不自动把每条业务 case 扩成设备矩阵。此前单宽度业务通过不能当作多宽度验证已完成。
|
|
77
|
+
|
|
78
|
+
## 图片与滚动的具体证据链
|
|
79
|
+
|
|
80
|
+
Web 模拟器在页面打开前订阅实际资源响应,按当前页面/frame、预期 URL 与载体关联,核状态和原响应字节可解码。懒加载资源在正常滚动到达后等待对应真实响应,不能提前冻结收据列表漏掉迟到资源;不能额外下载图片来补产品加载证据。缓存或跨 frame 复用缺少直接收据时,记录观察缺口,先确认平台真实缓存/加载机制,不借旧页同 URL 收据通过。
|
|
81
|
+
|
|
82
|
+
可在观察前正常滚动目标到可见区,再测裁剪及可达性;屏外产生的负交集高度不能直接判产品图片坏。滚动不得改变 case 的数据、分支或引入新业务请求。宿主已扣导航/安全区时页面不再二次扣减;尺寸从当前宿主实测,不写死某次内容高度。
|
|
83
|
+
|
|
84
|
+
资源校验器以错 URL/frame、响应失败、无法解码、缺失收据等负例验证;这只是设施校验,不能声称真实坏图业务场景已经运行。平台公开 onLoad 可用时优先采用,模拟器网络证据不冒称真机事件。
|
|
85
|
+
|
|
86
|
+
## 点击前的真实可操作性
|
|
87
|
+
|
|
88
|
+
官方 loading API 回调成功不必然等于遮罩已完成退出。正常稳定态操作可有界等待实际宿主遮罩退出,再执行原始真实点击;等待只读取状态,不删 DOM、不调用 hideLoading 替产品修复、不固定 sleep、不 force click。
|
|
89
|
+
|
|
90
|
+
held/竞态 case 若目标正是加载中的行为,不能套正常稳定态等待改变场景。相应 case 的外部响应交付时刻保持正式输入规定。超时应记录阻挡载体、实际生命周期及未发生请求,不能笼统归为业务失败。
|
|
91
|
+
|
|
92
|
+
## 方法的验证范围与长期维护
|
|
93
|
+
|
|
94
|
+
上述文字裁切、原生图片背景承载、正常滚动、相对布局、rpx 观察和遮罩退出等待已有真实小程序 case 的工程实践依据;不代表所有平台版本、缓存路径及每个消费者均验证。工程内保存实际适配器、自检与消费者关联,不将某个业务值、私有 DOM 选择器或临时报告路径当通用接口。
|
|
95
|
+
|
|
96
|
+
平台适配变化时,复用既有方法并检查受影响消费者;无需从头试验已证明的方法,也不能把方法说明当成已交付可调用的函数。测试任务输入必须明确既有实现路径或本次需实现的接口、正负自检及适用限制。业务目标仍只从 Spec/Islands 取得。
|
|
97
|
+
|
|
98
|
+
## 公共字体环境
|
|
99
|
+
|
|
100
|
+
设备型号、CSS字体声明相同不保证实际字体相同。字体属于公共运行环境,不能逐case注入替代字体或改预期字重来迁就宿主。原型对照与模拟器使用同一固定字体配置;记录字体来源/版本/摘要,并用浏览器实际使用字体(例如CDP平台字体查询)验证。Linux缺少移动端字体时,应按用户批准的字体配置准备官方可用资源或开源替代;替代字体不能标为iOS原生字体。可变字体的PostScript名称不等同于当前字重。字体资源与缓存放测试环境,不进入产品发布包;可重建环境脚本属于测试设施。
|
|
101
|
+
|
|
102
|
+
核文字视觉时同时观察原生组件的文字叶节点和语义宿主;宿主的font声明、居中布局不保证内部文字没有被默认样式覆盖或裁切。内容断言通过不能代表字号、字重、行高、颜色和对齐已验证。
|
|
103
|
+
|
|
104
|
+
## 宿主导航与原型增量
|
|
105
|
+
|
|
106
|
+
核对原型变更时包含由宿主绘制的导航栏,追踪可见标题、背景等源节点及token到既有测试责任;应用window、页面配置和运行时导航API可能覆盖同一属性,需观察最终生效结果。期望从本轮原型取得,不从产品配置读取后自证一致,不将某轮颜色写成永久默认值。
|
|
107
|
+
|
|
108
|
+
在相关case或明确的全局外观验收中核宿主导航,截图必须包含实际导航区域;内容frame颜色/标题断言不能替代宿主观察。分别记录配置检查与模拟器实际显示证据,未观察到则保留未验。复用Islands既有目录和ID,不为补全局检查虚增源覆盖数,也不要求每条无关case重复断言导航。
|
|
109
|
+
|
|
110
|
+
对跨区域的宿主外观建立独立、可运行的全局回归case,组织在明确的全局目录,纳入统一批量清单。它复用页面打开准备,集中断言源明确的导航标题/背景及实际覆盖结果,失败单独报告;不复制到每个业务case。维护全局目标到原型节点/token的映射,原型相应变化时同步期望并复验。优先关联已有Islands原ID;源目录没有对应责任时显式登记为项目补充case,独立统计,不伪造Islands ID或增加其覆盖分母。模拟器观察能力不足的目标明确未验,不用配置静态检查冒充运行通过。
|
|
111
|
+
|
|
112
|
+
## 扩展覆盖前的原生接入检查
|
|
113
|
+
|
|
114
|
+
新增观察先复用已核helper,按源语义和所在区域确认实例;在真实小程序中验证代表图片与交互。审查image/img、src/currentSrc、data-*及HTML禁用态等假设:这些可能是某个适配器的有效实现,但必须有当前原生载体证据,不能仅凭标签名/源码AXML推定Web DOM属性。图片URL读取与真实加载收据都要保留;列表实例定位不依靠运行时未保留的data-index,也不根据期望值反向挑元素。新增观察在准备阶段未到目标时明确未验,不能用编译、假DOM单测或其他组件的绿例替代。
|
|
115
|
+
|
|
116
|
+
## 公共几何误差预算
|
|
117
|
+
|
|
118
|
+
普通盒尺寸和位置由公共几何比较器统一使用 **0.25逻辑px绝对容差**;这是用户批准的工程误差预算,不是像素相等门禁,也不代表每次差异均已证明由换算导致。不乘DPR、不随元素大小扩大,不逐case设置容差,不为该预算内微差调整产品尺寸。
|
|
119
|
+
|
|
120
|
+
字体样式的数值精度与普通盒几何分开;颜色、字重、文案、数量、身份、请求参数仍按各自精确规则检查。文字裁切、溢出、交互遮挡、可达性独立验收,不能因为尺寸近似通过而略过。已有字体Range、边框绘制等特有量化规则需保留依据,不混成通用误差。
|
|
121
|
+
|
|
122
|
+
公共控制覆盖双向误差、恰好0.25通过、超过0.25拒绝、大小元素预算相同及NaN/Infinity拒绝;原始实测值和期望不改写。先归并失败原因,避免为肉眼不可见的微差逐case修补。平台明显缩放错误、字体错误或超过预算的差异继续报告。
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
## 瞬态输入与截图的观察干扰
|
|
126
|
+
|
|
127
|
+
按住、拖动等瞬态输入下,截图耗时可能触发平台长按阈值,改变后续释放行为。先用相同输入的有图/无图有限对照确认因果;不得通过修改SDK计时、补点击或放宽请求边界修绿。若确认截图本身干扰,可将正式完整行为执行与独立展示采集分离:正式执行保原准备、目标、释放、请求返回及清理;采集执行从相同准备到目标截图,使用实际输入安全取消,未执行的后续动作与边界明确标为artifact-only,未知请求仍严格拒绝。
|
|
128
|
+
|
|
129
|
+
两份证据保留独立execution ID,并核case、准备/Mock计划、源码、产品、运行包和依赖身份;采集不得增加通过数、替代失败行为或伪造已消费请求。产品变化影响画面时重新采集必要画面,历史图保留其原身份及适用性。自动报告明确区分正式通过、失败、独立采集与历史复用。
|
|
130
|
+
|
|
131
|
+
宿主导航前景须覆盖时间、网络、电量、标题和胶囊等实际可见载体。图标可能通过SVG或背景位图绘制,继承的CSS color不代表实际图标颜色;由公共适配器读取实际paint,并保白前景、缺失载体等反例。平台主题到原型精确色值的映射依据须明确,不能自行以“深色”代替源要求的精确颜色。
|
|
132
|
+
|
|
133
|
+
跨区域顺序/不重叠责任以两个独立源目标锚点测量,不能用相邻元素推断另一个目标。编译前核所需锚点在产品声明、合同和最终运行包中闭合;补充责任独立登记,不虚增Islands覆盖分母。
|
|
134
|
+
|
|
135
|
+
## 分组扩展与运行中归因
|
|
136
|
+
|
|
137
|
+
完整范围验收不等于一次不可拆分的大批次。按准备状态、请求链、插件公开导出、原生承载和观察能力分组,列每组原ID、代表case、已验证依据和扩展条件。准备预检核成功/空/错误数据与目标状态一致,插件provider与组件名符合公开导出,目标及辅助锚点路径可解析;不能仅靠编译证明真实挂载与请求闭包。
|
|
138
|
+
|
|
139
|
+
新接入的代表须在当前真实产品到达目标并完成严格请求与清理,再调度同依赖组。持续记录每条执行身份、原ID、阶段和失败症状;确认公共共因后暂缓该组未开始的执行,保留notrun原因,独立组继续。不得边运行边修改冻结源码,也不得把代表成功推算为整组通过。修复后按影响集合复验,不重跑未受影响绿例。
|
|
140
|
+
|
|
141
|
+
确定的产品失败及时以固定源码和收据交接,不等待全量结果或最终报告。接入探针成功而实际产品同类失败时,明确二者差异,将超出已定方案的不确定性交Owner核查,不不断扩大SDK试错。未经证实的症状不能统一标成产品缺陷;源问题、测试准备、公共观察和产品责任分列。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 专用语义锚点与公共观察能力
|
|
2
|
+
|
|
3
|
+
## 身份合同
|
|
4
|
+
|
|
5
|
+
产品以 `data-anchor-id` 声明测试目标身份,值直接使用当前 Spec 的页面内完整目标路径;不另造英文别名或人工翻译映射。页面级索引记录源目标、锚点、组件承载和接入状态,不复制业务期望。业务 `id`、class、文案及图片 URL 不作为替代身份;样式和业务逻辑不依赖测试锚点。
|
|
6
|
+
|
|
7
|
+
路径标识的是目标,不是内容/视觉等测试类型。同一目标的多个 case 复用锚点,仍各自维护原ID及目标断言。跨页面以当前真实页面实例限定范围。循环目标先明确源成员身份和稳定实例键,在索引中记录实例区分规则;不得用待断言文案或任意位置猜实例,也不自行拼接可能冲突的路径。源路径变更时核对索引、组件声明和 case 引用,不能让两套名称静默分叉。
|
|
8
|
+
|
|
9
|
+
自定义组件将锚点显式传到内部实际承载节点。默认虚拟组件的调用标签可能没有实体节点,不能假定其属性自动落到内部第一个子元素;多根、多目标分别声明,保持原产品结构和语义,不为定位增加改变布局的包装。
|
|
10
|
+
|
|
11
|
+
## 公共接口独占平台接入
|
|
12
|
+
|
|
13
|
+
case 只声明准备、成组请求/响应、目标锚点、动作顺序及源期望,并调用公共操作/观察能力。平台适配器统一负责 frame、标识解析、唯一性、文字/图片/几何和真实输入。工具不得包含具体业务名称、文案、资源或页面 CSS 选择器。
|
|
14
|
+
|
|
15
|
+
case 及业务目标定义不得绕过工具导入 Playwright、访问裸 page/frame/DOM/Fiber、执行 evaluate 或自写 locator。工程用静态依赖/接口检查限制旁路,原生底层能力只向公共适配器开放。能力不足时先补公共接口和正负控制,不在 case 开临时逃生口。Playwright runner、公共适配器与其设施自检不属于业务 case,仍可使用必要平台能力。
|
|
16
|
+
|
|
17
|
+
目标应唯一时零/多匹配明确失败;列表按集合责任检查;隐藏责任按源区分不存在与不可见。不能按预期文本/URL筛选后自证正确,不能 `.first()` 消除歧义。标识只证明身份,仍须检查实际渲染、加载、可操作性和请求,不把运行时 props 当显示正确的证据。
|
|
18
|
+
|
|
19
|
+
## 平台桥接
|
|
20
|
+
|
|
21
|
+
平台不将 `data-anchor-id` 透传到 Web DOM 时,由公共测试适配器同步产品已声明的标识。只补身份属性,不改文本、样式、业务状态、节点结构、事件或 SDK;不根据测试预期生成标识。更新、空值、卸载和节点复用要删除旧标识;已有冲突不得覆盖掩盖。选择器由工具安全编码,不能将含空格/斜杠的完整路径直接拼成 CSS `#id`。
|
|
22
|
+
|
|
23
|
+
已验证的 Minifish 2.40.1 Web模拟器使用 AppX-NG:AXML `data-anchor-id` 编译为节点 dataset 的 `anchorId`,真实元素关联的 `$$dataset.anchorId` 可读取。独立实验在公共观察/动作前同步到 DOM 专用属性,真实图片/文字/按钮、组件内部目标、列表重排、纯dataset改名、隐藏/卸载/重挂及重复缺失控制通过。该字段是当前运行时适配细节,不是公开跨平台API;正式工具要声明已验版本、能力检查、失效错误和消费者,不能在 case 直接使用。
|
|
24
|
+
|
|
25
|
+
其他运行时可采用经过验证的桥接。React DevTools/Fiber方案不能因外壳用了React就套到业务页;当前实验只在外壳发现React提交,业务页未注册React renderer。需要基于实际业务渲染器验证,保留已有hook行为,不把其他产品经验当本平台已验证。
|
|
26
|
+
|
|
27
|
+
这些是能力验证和工程规则,不表示每个仓库已经有可调用实现。任务必须提供正式公共模块、命令及适用范围;独立实验不计业务覆盖,迁移后需按变更影响验证真实原case。新策略在明确安全点接入,不能中途更改运行批次的输入或假称旧case已经迁移。
|
|
28
|
+
|
|
29
|
+
## 迁移交付检查
|
|
30
|
+
|
|
31
|
+
正式测试定义与前序动作只声明Spec路径和公共能力;平台DOM访问仅留在公共观察/驱动适配器,禁止case绕过。迁移保留原ID集合、请求返回计划、目标期望和不可达记录,目标身份变化不应改测试答案。静态检查需识别case直接引入Playwright或使用locator/evaluate等旁路,也检查旧英文目标别名与旧业务CSS身份定位残留;检查适配器合法的样式/几何只读采集时不误禁全部DOM读取。
|
|
32
|
+
|
|
33
|
+
适配器等待真实业务renderer具备能力后才判断支持性,不把page.goto完成视为原生组件已渲染。dataset-only更新、清空、卸载和重复标识须验证;自动同步只写专用锚点,不能改业务/样式/显隐。清理异常与请求审计分别收集,前者失败不能阻止后者执行。整批源码冻结包括设施checks与README,不能误认为只有生成包受认证。
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# 测试预期与持续复盘
|
|
2
|
+
|
|
3
|
+
用于新建、复用和独立审查小程序端黑盒测试,以及追查“测试通过但结果错误”。此处只定义独立的测试建设义务,不以产品存在、父 case 先通过或研发完成作为覆盖设计前提。目录和 case 粒度以 Islands 正式输入为准。
|
|
4
|
+
|
|
5
|
+
## 先确定预期,再选择断言
|
|
6
|
+
|
|
7
|
+
从当前 Spec、Prototype、平台合同和已确认设计逐项确定:
|
|
8
|
+
|
|
9
|
+
| 责任 | 在既有覆盖关联/场景中记录什么 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| 来源及意图 | 当前语义定位、触发动作、期望结果;不能只登记测试 ID |
|
|
12
|
+
| 承载与范围 | 原生壳、业务页面、外部组件或接口;当前页面/状态/账户边界 |
|
|
13
|
+
| 正确结果 | 内容、数量、显隐、交互、状态转换及适用的布局关系 |
|
|
14
|
+
| 禁止结果 | 重复承载、旧数据残留、相斥分支共存、漏请求/错请求等有依据的反例 |
|
|
15
|
+
| 证据 | 具体请求/DOM/宿主观察与断言;无法观察的责任显式待验 |
|
|
16
|
+
|
|
17
|
+
按实际责任选用,不要求所有字段机械套给每个场景。样例不自动代表所有业务规则;原型模拟的系统 UI 不自动代表业务组件;产品现状、截图及历史全绿都不是独立预期来源。输入不足以判断时反馈精确分歧,不虚构业务规则。
|
|
18
|
+
|
|
19
|
+
## 分三次检查
|
|
20
|
+
|
|
21
|
+
1. **预期正确吗**:不看产品代码,沿 Islands 来源还原当前 case 的准备路径和目标结果。明确原型中哪些是平台壳、业务内容和外部组件。检查已有测试是否强迫错误的 DOM、样式或数据表达。
|
|
22
|
+
2. **能抓住错误吗**:逐项阅读实际断言,不止覆盖 ID。检查存在是否漏数量,文本是否漏角色,位置是否漏遮挡,请求是否漏参数,终态是否漏生命周期。每个已发现缺陷和高风险共享断言补最小反例;无需无穷穷举或对无风险辅助函数机械写测试。
|
|
23
|
+
定位先依据语义角色和范围独立确定,再检查期望值;不能遍历祖先或候选元素直到找到符合预期样式的一项,就认定目标组件正确。允许平台 DOM 结构差异,但须证明选中节点承载的是该项责任。
|
|
24
|
+
|
|
25
|
+
3. **证据真实执行了吗**:宿主、触发动作、请求及断言确实到达;用例在前序失败时不能声称后面的断言已验证。独立复核使用已交付制品和明确源码状态,不能只接受截图或数量。
|
|
26
|
+
|
|
27
|
+
反例优先在测试设施的受控夹具中构造,证明断言对正确结果通过、错误结果失败。能取得缺陷制品时保留失败回归,再验修复制品;不能取得时注明只有断言反例验证,不能冒称旧产品已实跑失败。反例夹具不能替代业务 E2E。
|
|
28
|
+
|
|
29
|
+
## 可迁移的审查例子
|
|
30
|
+
|
|
31
|
+
| 情况 | 应得出的结论 |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| 原型仅一个逻辑标题,宿主和内容各出现一次 | 组合结果重复;即使二者不重叠,也必须失败 |
|
|
34
|
+
| 同样文案分别是导航标题和明确要求的卡片标题 | 角色不同,不能按全局文本次数误杀 |
|
|
35
|
+
| 原生标题满足输入,内容中无标题节点 | 应可通过;不能强迫业务复制 DOM 或原型壳字体 |
|
|
36
|
+
| 输入明确自定义导航并隐藏原生标题 | 按自定义导航验收,不能套原生控件规则 |
|
|
37
|
+
| `.first()` 使两个同角色元素只验证一个 | 先验证角色数量;有明确首项业务政策的集合不属于此问题 |
|
|
38
|
+
| 迟到响应尚未真正交付,仅等待后截图 | 不足以证明隔离;先证明确实交付,再看结果未被覆盖 |
|
|
39
|
+
| 图片 URL/CSS 存在但资源未加载 | 不足以证明图片展示;验证当前平台实际加载和可见结果 |
|
|
40
|
+
|
|
41
|
+
这不是固定业务用例表。新问题只有证明可迁移后才扩充规则;业务值、具体页面文案与历史端口留在项目回归里。
|
|
42
|
+
|
|
43
|
+
## 持续积累而不膨胀
|
|
44
|
+
|
|
45
|
+
每次漏测先在项目记录“输入依据 → 错误预期或缺失断言 → 最小反例 → 修复与验证 → 受影响责任”。同类问题归入既有模式,优先修共享断言并检查所有消费者;不同语义不可仅按相同文案归类。
|
|
46
|
+
|
|
47
|
+
项目具体回归长期放测试目录;报告/截图留仓库外;跨节点临时探针用协作共享区。通用规则由本 Skill 维护,研发 Skill 只消费义务,不复制另一套算法。每次迭代准备与交付复核都读取未闭环缺陷和相关模式,只重验受输入、实现或设施变化影响的部分。没有自动产生业务新要求,也没有自动修改输入、合 master 或发布 Skill 的授权。
|
|
48
|
+
|
|
49
|
+
## 路径投影与数据来源
|
|
50
|
+
|
|
51
|
+
按目录段、分支值和叶节点精确解释目标;不要用完整路径的子串推断结果分支,祖先可能含相同词。列表父目标展开到成员,已是成员的目标不得再次追加同名子段。共享生成器保祖先同词、父列表与叶成员的最小反例。
|
|
52
|
+
|
|
53
|
+
视觉责任需分清容器、文字叶和占位提示:整体按钮的背景、圆角、间距不自动属于文字叶;有输入值时不可见placeholder不等于缺少配置。按最终原型级联和实际责任载体取期望,不要求产品增加空包装、重复padding或改文字字重满足错误观察。公开平台无法观察的属性保明确观察缺口,不读产品私有状态或返回默认值。
|
|
54
|
+
|
|
55
|
+
不同来源的业务数据与展示模板不能互相填补。准备数据须让正式权威字段满足目标分支,不能把模板样例值冒充真实业务字段。Mock业务入口使用冻结backend-contract的目标和wire字段,不因历史测试的旧接口名被产品拒绝就判产品错误;插件事务与普通事务的callSite分别核对。
|
|
56
|
+
|
|
57
|
+
父目录责任不要求产品额外绘制父节点。若当前准备命中某个真实子分支,父状态/视觉责任应显式关联该子分支承载并保留父原ID;先与同case的内容目标及源分支核对,避免运行时才发现父路径没有实体。静态反例同时覆盖父转叶、已有叶不重复追加及其他case不变。
|
|
58
|
+
|
|
59
|
+
真实运行前按编译case的完整插件事件计划选择制品,逐字段与manifest及文件hash核对;不能按旧批次编号猜artifact。无插件计划也明确检查。准备阶段选错制品不能算产品失败;纠正已证实的配置错误后可作一次必要验证,保首轮原件,不通过改变Mock或断言绕过。
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## 交互后状态与准备依赖闭包
|
|
63
|
+
|
|
64
|
+
交互case的目标状态由正式绑定执行后的状态决定,不机械继承点击前内容断言。若源明确关闭提示或离开页面,点击前用真实可操作目标确认入口,点击后验证相应关闭或导航以及完整请求边界;不得同时要求已关闭按钮仍可见,也不得只删掉失败的目标断言。
|
|
65
|
+
|
|
66
|
+
修改准备响应中的机构、账户或其他共享字段时,同步核对该字段在本case所有后续请求中的正式投影。公共夹具校验、请求期望与回调观察三者都必须支持这份合法准备;先做关联一致性和错误值反例,再编译运行。当前项目的有限fixture枚举不是通用业务常量,新增合法变体不得退化为任意值放行,运行时仍按每case完整请求严格匹配。
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
## 最终样式与裁切的来源审计
|
|
70
|
+
|
|
71
|
+
视觉预期必须绑定准确源叶、承载元素、实际class、样式文件及最终级联,不能只读早期通用规则或把未写在叶上的属性默认成visible。区分目标自身overflow与祖先裁切、inline文字与外层行盒;内层文字可继承字体,但不能把祖先全部样式复制成叶的自有义务。源明确hidden+ellipsis时,只在该来源的有限观察合同内允许相应水平省略,仍验证正确内容、尺寸、真实可见性和纵向裁切;不得因一项合法省略全局禁用裁切断言。
|
|
72
|
+
|
|
73
|
+
生成器的预期要有独立来源正控,不只检验“与自己手写常量不同会失败”。反例包括错源叶的合法值、遗漏更强规则、把祖先当目标、在非省略来源套用省略豁免以及真实纵向裁切。先完成同生成器/公共消费者影响扫描,再运行受影响批次;测试缺陷不能要求产品改成错误期待。
|
|
74
|
+
|
|
75
|
+
## 修复后的跨批传播
|
|
76
|
+
|
|
77
|
+
发现case共因时,原测试负责人说明错误来源、实际消费的Skill和任务输入、规则缺失或误用及影响集合,修复整批同类问题而非只改失败实例。确定可迁移规则后,Owner及时更新唯一测试Skill并提交推送,将原始包、精确commit/版本/文件hash、案例依据和适用边界共享给所有测试负责人及公共设施、验收角色。已交付批次先做影响审查,不机械全量重跑;活动运行保持输入冻结,在下一安全修复/新批次消费并记录版本。跨批共性设施由独立公共节点修复并作为受影响批次前置,不在各区域复制不同补丁。项目具体数值和路径留项目回归,不硬编码进通用Skill。
|
package/README.md
DELETED