From 2cbd2ca9a7ed42c6e6eec1ba4568482d9562e373 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Fri, 6 Nov 2026 01:50:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B91(QA=20harness=C2=B7=E6=8E=A2=E9=92=88?= =?UTF-8?q?=E5=AD=98=E9=87=8Femit=E7=9C=9F=E8=BE=93=E5=85=A5=E5=8C=96+?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E7=99=BB=E8=AE=B0=E5=86=99=E5=85=A5):=20?= =?UTF-8?q?=E4=B8=A4=E6=8E=A2=E9=92=8852=E5=A4=84emit=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E8=BD=AC=E7=9C=9F=E8=BE=93=E5=85=A5=E7=AE=A1=E7=BA=BF(push=5Fi?= =?UTF-8?q?nput=20press+release=E6=88=90=E5=AF=B9)51=E5=A4=84,=E4=BF=9D?= =?UTF-8?q?=E7=95=991=E5=A4=84=E7=BD=AE=E7=81=B0=E6=80=81=E7=A9=BF?= =?UTF-8?q?=E9=80=8Femit=E6=A0=87=E3=80=94=E6=8E=A5=E7=BA=BF=E6=96=AD?= =?UTF-8?q?=E8=A8=80=E3=80=95;=20=E6=96=B0=E5=A2=9Eprobe=5Fcoverage=5Freco?= =?UTF-8?q?rder.gd=E7=9C=9F=E8=BE=93=E5=85=A5=E8=A6=86=E7=9B=96=E7=99=BB?= =?UTF-8?q?=E8=AE=B0=E4=BB=B6(=E6=97=97=E6=A0=87=E5=9C=A8=E4=BD=8D?= =?UTF-8?q?=E6=9C=9F=E9=97=B4=E5=91=BD=E4=B8=AD=E5=85=A5=E8=B4=A6,?= =?UTF-8?q?=E9=94=9A=E9=93=BE=E5=BD=92=E4=B8=80=E5=8C=96=E9=94=AE=3D?= =?UTF-8?q?=E5=85=B7=E5=90=8D/=E8=84=9A=E6=9C=AC=E9=94=9A+=E7=B1=BB#?= =?UTF-8?q?=E9=92=AE=E9=9D=A2=E6=96=87=E6=9C=AC+=E5=BA=8F=E4=BD=8D,@?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E5=90=8D=E4=B8=8D=E5=85=A5=E9=94=AE,JSONP?= =?UTF-8?q?=E8=90=BDtests/.gates/coverage/=E6=AF=8F=E6=8E=A2=E9=92=88?= =?UTF-8?q?=E4=B8=80=E4=BB=B6);=20probe=5Fui=5Futil=E8=A1=A5coverage=5Fhoo?= =?UTF-8?q?k=E5=8D=95=E7=82=B9+push=5Fmotion/push=5Fwheel(=E6=BB=9A?= =?UTF-8?q?=E8=BD=AEpress+release=E6=88=90=E5=AF=B9=E2=80=94=E2=80=94?= =?UTF-8?q?=E5=8F=AA=E5=8F=91press=E9=92=89=E6=AD=BB=E9=BC=A0=E6=A0=87?= =?UTF-8?q?=E7=84=A6=E7=82=B9=E5=AE=9E=E8=AF=81fork/=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E8=90=A5=E5=9C=B0=E4=B8=A4=E9=92=AE=E7=82=B9=E5=87=BB=E5=85=A8?= =?UTF-8?q?=E5=A4=B1=E6=95=88)/window=5Fpanel/scroll=5Fbutton=5Finto=5Fvie?= =?UTF-8?q?w(=E6=8A=98=E5=8F=A0=E5=8C=BA=E8=A1=8C=E9=92=AErect=E8=B6=8A?= =?UTF-8?q?=E7=AA=97=E5=BA=95=E6=A0=8F=E5=AE=9E=E8=AF=81=E8=AF=AF=E4=B8=AD?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E8=90=A5=E5=9C=B0=E9=92=AE,=E7=9C=9F?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=BB=9A=E8=BD=AE=E6=BB=9A=E5=85=A5=E5=8F=AF?= =?UTF-8?q?=E8=A7=86=E5=8C=BA=E5=86=8D=E7=82=B9);=20V5b=E9=81=AE=E6=8C=A1?= =?UTF-8?q?=E8=AF=95=E6=8E=A2=E8=AE=A2=E6=AD=A3=3D=E5=89=8D=E7=AA=97?= =?UTF-8?q?=E7=BB=8F=E7=9C=9F=E5=AE=9E=E8=BF=94=E5=9B=9E=E9=92=AE=E6=B8=85?= =?UTF-8?q?=E8=B4=A6=E5=86=8D=E7=9C=9F=E7=82=B9=E5=BC=80=E7=AA=97(emit?= =?UTF-8?q?=E7=9B=B4=E5=8F=91=E7=A9=BF=E9=81=AE=E7=BD=A9=E5=B1=9E=E5=8F=A3?= =?UTF-8?q?=E5=BE=84=E8=BF=9D=E4=BE=8B);=20=E8=90=BD=E7=82=B9=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E8=A1=A5=E9=92=892=E5=A4=84(esc=E6=AE=B5=E5=AD=90?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=BC=80=E7=AA=97=E8=90=BD=E7=82=B9/?= =?UTF-8?q?=E6=A0=91=E7=AA=97=E8=BF=94=E5=9B=9E=E9=92=AE=E8=90=BD=E7=82=B9?= =?UTF-8?q?);=20test-conventions=20=C2=A72=E6=96=B0=E5=A2=9EUI=E9=A9=B1?= =?UTF-8?q?=E5=8A=A8=E6=96=AD=E8=A8=80=E7=9C=9F=E8=BE=93=E5=85=A5=E7=AE=A1?= =?UTF-8?q?=E7=BA=BF=E6=9D=A1=E6=96=87(=E6=BB=9A=E8=BD=AE=E6=88=90?= =?UTF-8?q?=E5=AF=B9+=E6=8A=98=E5=8F=A0=E5=8C=BA=E6=BB=9A=E5=85=A5+?= =?UTF-8?q?=E8=90=BD=E7=82=B9=E5=88=A4=E5=AE=9A+=E6=8E=A5=E7=BA=BF?= =?UTF-8?q?=E6=96=AD=E8=A8=80=E8=B1=81=E5=85=8D=E5=8F=A3=E5=BE=84);=20.gat?= =?UTF-8?q?es/.gitignore=E6=94=B6coverage/=E3=80=82=E8=AF=BB=E6=95=B0:=20s?= =?UTF-8?q?creen=5Fflow=5Fprobe=E5=AD=A4=E7=AB=8B=E7=9B=B4=E8=B7=91PASS(?= =?UTF-8?q?=E5=85=AD=E6=AD=A5=E5=8A=A8=E7=BA=BF+=E5=B1=8F=E7=BA=A7?= =?UTF-8?q?=E4=BA=92=E6=96=A5=E5=85=A8=E7=BB=BF);=20ui=5Fclick=5Fprobe?= =?UTF-8?q?=E5=AD=A4=E7=AB=8B=E7=9B=B4=E8=B7=91exit=3D0=E9=97=AE=E9=A2=98?= =?UTF-8?q?=3D0(budget=3D15210,=E4=B8=89=E7=AC=94=E6=A0=91=E8=B4=AD?= =?UTF-8?q?=E4=B9=B0=E8=AF=B7=E6=B1=82=E5=85=A8=E9=80=9A,PROBE=5FSEED=3D7)?= =?UTF-8?q?;=20=E7=99=BB=E8=AE=B0=E8=90=BD=E7=9B=98ui=5Fclick=3D27?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6/38=E5=91=BD=E4=B8=AD/=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E5=90=8D=E8=B7=B3=E8=BF=870,screen=5Fflow=3D19=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6/25=E5=91=BD=E4=B8=AD=E3=80=82=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E6=A1=A3=E9=97=B8(fd9c8ad9=E5=9F=BA=E7=BA=BF):=20=E4=B8=A4?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BA=A2=E5=9D=87=E5=88=A4=E4=B8=BA=E4=B8=BB?= =?UTF-8?q?=E5=8C=BA=E6=8E=A8=E8=BF=9B=E6=BC=82=E7=A7=BB=E9=9D=9E=E6=9C=AC?= =?UTF-8?q?=E6=89=B9=E5=BC=95=E5=85=A5=E2=80=94=E2=80=94=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E7=BA=BF=E9=97=B8=E7=BA=A2=3D=E5=BE=85=E5=8A=9E=E6=B8=85?= =?UTF-8?q?=E5=8D=95QA=E6=9D=A1=E7=9B=AE=E8=AF=81=E6=8D=AE=E5=8F=A5(master?= =?UTF-8?q?=201730a8fb=E5=B7=B2=E4=BF=AE),=E5=8D=95=E5=85=83settlement=5Fw?= =?UTF-8?q?iring=5Fsnapshot=E7=BA=A2=E5=BE=85=E5=B9=B6master=E5=90=8E?= =?UTF-8?q?=E7=AA=84=E8=B7=91=E5=A4=8D=E6=A0=B8;=20=E6=9C=AC=E6=AD=A5?= =?UTF-8?q?=E5=87=AD=E6=8D=AE=3D=E4=B8=A4=E6=8E=A2=E9=92=88=E7=9B=B4?= =?UTF-8?q?=E8=B7=91=E7=BB=BF+=E5=81=8F=E5=B7=AE8=E6=9D=A1=E5=B7=B2?= =?UTF-8?q?=E5=9B=9E=E5=86=99qa-harness=E8=AE=A8=E8=AE=BA=E6=96=87?= =?UTF-8?q?=E6=A1=A3=C2=A710?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design/engineering/test-conventions.md | 2 + game/probe/probe_coverage_recorder.gd | 207 ++++++++++++++++++++++ game/probe/probe_coverage_recorder.gd.uid | 1 + game/probe/probe_ui_util.gd | 74 +++++++- game/probe/screen_flow_probe.gd | 63 +++---- game/probe/ui_click_probe.gd | 118 +++++++----- game/tests/.gates/.gitignore | 4 +- 7 files changed, 390 insertions(+), 79 deletions(-) create mode 100644 game/probe/probe_coverage_recorder.gd create mode 100644 game/probe/probe_coverage_recorder.gd.uid diff --git a/design/engineering/test-conventions.md b/design/engineering/test-conventions.md index c9eee8a7..32f46d5e 100644 --- a/design/engineering/test-conventions.md +++ b/design/engineering/test-conventions.md @@ -20,6 +20,8 @@ 凡模态覆盖层,探针必须断言:打开后自身 visible 且遮挡物已隐藏(模态被遮挡 = 功能存在但不可达)。 +**UI 驱动断言须走真输入管线(2026-11-06 立)**:探针里「点按钮/点场景物件」类驱动断言,一律经引擎输入管线承载(合成 InputEvent 走 `push_input`,press+release 成对;合成滚轮同样必须 press+release 成对——只发 press 会把鼠标焦点钉死在按下点控件上,后续点击全部失效);信号直发(`pressed.emit()` 等)绕过命中测试,保不了「玩家点击可达」,只许用于真输入到不了的面并当场标〔接线断言〕(现役例:置灰态穿透钉处理器兜底)。折叠区控件先以真输入滚轮滚入可视区再点。每个动线断言钉「落点」判定(点了之后到哪个屏/哪层可见),防驱动中断后的空转假绿。真输入命中控件时自动登记控件覆盖(探针共用面登记件落 `.gates/` 观测产物),覆盖面生长不靠人记。 + ## 3. 缺陷修复必须沉淀回归断言 每个缺陷修复必须在探针或冒烟中留下能抓住该缺陷的断言(例:封印动作耗尽 AP → 必须进入第 2 轮; diff --git a/game/probe/probe_coverage_recorder.gd b/game/probe/probe_coverage_recorder.gd new file mode 100644 index 00000000..feff5ca1 --- /dev/null +++ b/game/probe/probe_coverage_recorder.gd @@ -0,0 +1,207 @@ +# probe_coverage_recorder.gd — 真输入覆盖登记件(探针共用面) +# 是什么:探针/C 驱动件把合成 InputEvent 经 Viewport.push_input 送进引擎输入管线时,登记 +# 「真输入实际命中了哪些交互控件」,探针收尾落 JSONP 式 .js 到 tests/.gates/coverage/ +# (.js 供 file:// 页面