Files
youle_app_ohos/docs/设计文档/Plan/02_测试与验收计划.md
2026-06-25 06:25:30 +08:00

5.9 KiB
Raw Permalink Blame History

02 · 测试与验收计划

唯一判据:现有 H5 零改动运行,且行为与《契约规范》§8/§9/§11 完全一致。

1. 测试层次

层次 对象 手段 何时
单元测试 纯逻辑:MessageCodecHandlerRegistryVersionResolverConfigManager 解析、各 DTO 序列化 ArkTS 单测 + FakeWebController 随开发,CI 强制
桥协议测试 BridgeController 全路径 FakeWebController 模拟 H5 收发 M1
集成测试 容器 + 启动 + 资源 + 配置 真机/模拟器 M2 起
契约一致性测试 全 44 入站 + 全出站 handler 真机 + 测试 H5 探针 M3 起每周回归
端到端(E2E 真实大厅 H5 + 子游戏 + 活动页 真机手测 + 录屏 M3/M4
性能测试 冷启动、子游戏切换、内存 DevEco Profiler / hilog 打点 M5
安全测试 加固清单 人工审查 + 工具 M5

2. 关键测试资产

2.1 最小回显 H5M1 必备)

一个独立测试页,仅用桥 API

  • registerHandler('echo', (d,cb)=>cb(d))callHandler('getTime')callHandler('echo','hi')
  • 验证:H5→原生→回执、原生→H5→回执、启动前积压消息补发、yy:// 拦截(V1)。

2.2 契约探针 H5M3 回归)

一个覆盖全部 44 入站 handler的探针页:逐个 callHandler 并记录回传,与《契约规范》期望值比对,输出"通过/差异"报告。出站 handler 用 registerHandler 全量挂载、记录原生推送。

此页是"H5 零改动"的自动化守门员,纳入每周回归。

3. 两个阻塞性验证(最高优先,决定技术路线)

验证 用例 通过判据 不通过 → 动作
V1 yy:// 拦截M1, T-M1-07 最小 H5 设 iframe.src='yy://__queue__',原生 onLoadIntercept 取 URL 能拿到 yy:// URL 并拦截、_fetchQueue 回执经 yy://return/ 到达 onInterceptRequest+WebSchemeHandler;或改桥 JS 走 javaScriptProxy.postMessage00 §5
V2 file:// 跨域M2, T-M2-08 现有大厅 index.htmlfile:// 加载,请求本地 js/css/图片/app_data.js 资源全部正常加载、H5 正常运行 启用自定义协议/onInterceptRequest 接管本地资源(框架 §7.3

这两项必须在对应里程碑作为 Exit Gate 强制通过

4. 契约一致性核对清单(H5 零改动判据)

4.1 桥协议(§2

  • window.WebViewJavascriptBridge 注入后 API 与事件 WebViewJavascriptBridgeReady 一致
  • registerHandler/callHandler 双向、回执、callbackId/responseId 路由正确
  • _fetchQueueyy://return/ 回传(非 runJavaScript 返回值)
  • 启动前积压消息在注桥后补发

4.2 入站 44 handler(§8)—— 逐条核对名称/参数/同步返回

  • 账号社交:accreditloginfriendsSharetypeUrlToptitleDescriptgetphoto
  • 支付:paybrowsergetGameplay本期桩,验"不报错不卡死"
  • 设备信息:getTimegetphonestategetbatterygetwifiLevelgetnetworkgetcompareCodegetphoneInfogetmarketnamegetothernamegetOther
  • 交互:orientationvibratorrepeatvibratorcanclevibratorgameCopytextgamepastetextnotification(空)
  • 摇一摇:startshakeSwitchShakestopshake
  • 定位:startlocationgetlocationinfo
  • 音频:prepareaudiomediaTypeAudiosrcIsloopvoicePlaying
  • 扫码/相机/浏览器/网页:opensaomaopencamerabrowserOpenurlTitleDataopenApplyDownloadpath
  • 子游戏/房间:SwitchOverGameDatagetGameinstallcreateRoomexitRoomgetVideoinfoDragViewvideoIsshow房间本期桩
  • 退出/返回:finshbackgameData

4.3 出站 handler(§9)—— 逐条核对名称/data 结构/时机

  • appservice(1/2)、setPostUrlgetWebdatagetphotoshareloginsharesuccessshakeEndgetBatterygetwifiLevelgetnetworkgetaudiourl(+filepath)、gameui_play_voicegameui_stop_voicegetphoneinfogetVideoinfo(桩不推)、PayuserPaytypePaystate(桩不推)、getlocationinfophonestategetsaomaDatagetcameraaAddress
  • 名称陷阱:backgameData-(带连字符)≠ 入站 backgameData

4.4 数据结构(§12

  • sharetypeBean/MaplocationInfo/phoneInfoBean/savephotoURLBean/videoinfobean/Othervideoinfo/支付/sharelogin/sharesuccess 字段名同名同义

4.5 启动/资源/容器(§3–§7、§11)

  • 配置键齐全、远程配置分层覆盖、showmessage 阻断
  • 资源路径、version.xml 版本比较、zip 下载解压
  • app_data.js 全局变量、加载前注入
  • 入口 URLweburl 空/非空)、?Launchtype= 参数
  • 通用网页容器 settings 6 法 + 3 直调 + 101 回传

5. 里程碑验收 Gate

里程碑 Gate
M0 工程编译/签名/CI 通过;contracts 全量类型对照契约零缺漏
M1 回显 H5 双向通;V1 通过;桥单测 ≥80%
M2 真机加载大厅 H5、进子游戏;V2 通过app_data.js 时序正确
M3 §4.2/§4.3/§4.4 清单全过;桩能力不报错不卡死
M4 §11.3 通用容器一致;活动页/收银台/客服打开回传正常
M5 切换 <300ms、冷启动 <2s(基线);安全清单(附录 B)全过;可观测可用
本期总验收 现有大厅 + 全部子游戏 + 网页页面零改动运行;§4 全清单通过

6. 缺陷分级与回归

  • P0:H5 无法运行/桥不通/崩溃 → 当日修复,阻塞合入。
  • P1:某 handler 行为不符契约 → 当迭代修复。
  • P2:性能/体验 → M5 收口。
  • 每次合入触发"契约探针 H5"回归,防止已通过的 handler 退化。