⼩程序可测性能⼒建设与实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 小程序可测性能力建设与实践
美团到店平台技术部
2. 田文杰
到店平台技术部
2021年加入美团,一直致力于深耕移动端质量保障体
系建设。目前负责移动端可测性能力的建设与落地。
3. 目录
01 认识小程序可测性
02 小程序可测性能力建设方案
03 实践:⻔票业务小程序测试经验
04 总结与展望
C3-机密文件 严禁外传
4. 目录
01 认识小程序可测性
可测性介绍
小程序介绍
小程序可测性
02 小程序可测性能力建设方案
03 实践:⻔票业务小程序测试经验
04 总结与展望
C3-机密文件 严禁外传
5. 测试活动简介
从测试的本质理解可测性
所有测试都可以视为系统因某个 激励 产生 响应 ,然后对其全面 检测 的过程
!'($)*
!"#$
!"#$%&
Input
Output
6. 可测性概念
从测试的本质理解可测性
所有测试都可以视为系统因某个 激励 产生 响应 ,然后对其全面 检测 的过程
!'($)*
!"#$
!"#$%&
%&
%'
%"(
可测
激励 可控 , 响应 可观 ,谓之
7. 移动端测试分析
移动端可测性天然很低
Ddd
UI
应用
可观性
可控性
系统&设备
7
8. 用户可观
移动端测试分析
挑战
测试领域多,测试场景复杂,依赖
各种状态,构造困难,难以覆盖所
有情况
8
9. 移动端测试分析
挑战
多技术栈,多产品、多生态
多⻚面,⻓链路,多场景
多机型,多系统
9
10. 移动端测试分析
挑战
方向
分析
多技术栈复杂、多生态、多端复用 测试方案需考虑通用性
多⻚面、多场景、⻓链路 难以提高覆盖、效率、深度
测试领域多,测试场景依赖各种状态,
构造困难
测试能力
通用&具备扩展能力的测试方案
可自动化、高覆盖
基础设施
可测性低
可测性改进
10
11. 移动端质量保障体系
业务场景
手工测试
融合手工和自动化测试
自动化测试
通用、可扩展的能力 通过具备很强扩展性的通用能力框架
可测性改进 以可测性改进为基础
可测性是一切测试活动的基础,其贯穿于测试活动的始终
11
12. 可测性建设目标
测试场景可直达 (可控性)
内部模块可操纵 (可控性)
内部模块可感知 (可观性)
提升测试效率和测试深度
12
13. 目录
01 认识小程序可测性
可测性介绍
小程序介绍
小程序可测性
02 小程序可测性能力建设方案
03 实践:⻔票业务小程序测试经验
04 总结与展望
C3-机密文件 严禁外传
14. 小程序介绍
微信小程序
微信小程序
微信客户端
(宿主应用)
运行在微信客户端的“轻应用”,依附微信生态
系统
不用下载安装,用完即走
14
15. 小程序发展
第一批发布微信小程序
…
各平台相继推出小程序,开放升级基础服务能力,生
态圈逐步扩大,小程序得到 迅速发展
15
16. 小程序技术架构分析
小程序运行环境分为渲染层和逻辑层,分别由两个线程管理
两个线程间通信及与外部通信均经过宿主应用转发
不同系统的运行环境有所区别
受宿主应用的限制,增加测试难度
16
17. 目录
01 认识小程序可测性
可测性介绍
小程序介绍
小程序可测性
02 小程序可测性能力建设方案
03 实践:⻔票业务小程序测试经验
04 总结与展望
C3-机密文件 严禁外传
18. 小程序可测性现状分析
Charles代理
Airtest
Charles是一个HTTP代理/反向代理工具,使得开发者能够
Airtest UI自动化框架,适用于游戏和App,提供了跨平台
查看HTTP和SSL/HTTPS,包括请求、响应以及HTTP标头
的API,包括安装应用、模拟输入、断言等,基于图像识别
(其中包含cookie和缓存信息)
技术定位UI元素,同时提供了命令行和python接口,可以
很容易地在大规模设备集群上运行
Airtest
对逻辑层测试限制较大,测试仍是黑盒
构造复杂场景比较困难
18
19. 小程序可测性现状分析
微信官方工具Minium
DebugPanel
minium是小程序专用自动化框架。使用minium可以进行小 DebugPanel通常是研发用于自测程序逻辑而
程序UI自动化测试, 并进行函数的mock,可以直接跳转到 开发的调试工具,能测试部分场景
小程序某个⻚面并设置⻚面数据,做针对性的全面测试
基于开发者工具,
不适用QA日常测试
小程序专用,无法迁移
开发者工具与真机
操作比较繁琐
运行环境有差异
19
20. 小程序可测性全景目标
一套多端运行能够深入程序内部进行控
制,对内部状态进行观测的可迁移可测
性能力,提升测试效率和测试深度
20
21. 目录
01 认识小程序可测性
02 小程序可测性能力建设方案
03 实践:⻔票业务小程序测试经验
04 总结与展望
C3-机密文件 严禁外传
22. 基本原理
② 处理参数
Input
Output
③ 上报状态
① 传递参数
可测性改造的基本原理是 人/机向被测对象传递参数/指令,被测对象收到参数进行处理(可测性SDK),并将应用状态上报/呈现的过程
22
23. 整体架构
通信层:与人/机通信。通过HTTP/WebSocket接收人/机传递的
控制指令,并将应用状态上报给人/机
指令分发层:指令处理与分发。解析通信层接收的控制指令,根据
指令类型传递给功能层对应的参数
功能层:提供可测性能力。处理参数,并设置Hook层相关状态/调
用相关方法来控制应用,同时将Hook层获取的应用信息传递给通
信层进行上报
Hook层:与小程序的基础库和开发者代码交互,提供底层的状态/
方法拦截能力
监控层:提供小程序运行时异常监控能力,并对可测性行为进行埋
点上报
23
24. 流程分析——以请求代理为例
Hook层
小程序加载时,Hook层先于业务代码加载
加载Hook层
针对小程序代码层次:
基础库 - 通用
公共组件库(如美团登录组件) - 组件级通用
业务特定逻辑 - 以插件形式引入
技术手段:JavaScript Hook
修改属性 Prototype
Getter/Setter 静态Hook
Proxy …
24
25. 流程分析——以请求代理为例
Hook层
基本思路:拦截wx对象的request方法
代理方式:在传入url的host前加上代理
服务器host
https://xxx.sankuai.com/xxx?xx=1
http://127.0.0.1:1234/https://xxx.sankuai.com/xxx?xx=1
通过配置mockStatus和mockUrl控制小程序请求代理状态
25
26. 流程分析——以请求代理为例
通信层
可测性SDK与人/机的通信。通过HTTP/WebSocket等方式接收人
/机传递的控制指令,并将应用状态上报给人/机
26
27. 流程分析——以请求代理为例
指令分发层
解析通信层接收的控制指令,编排控制指令的执行次序,根据指令类
型选择相应的功能层方法(设置代理)执行
功能层
设置Hook层拦截请求的配置参数
27
28. 多平台扩展
微信小程序 支付宝小程序
美团小程序 快手小程序
百度地图小程序 …
基本思路:Adapter - 基础库API与微信类似,针对不同平台进行少量API、wxml和文件类型适配
28
29. 应用
Lyrebird:面向移动应用及大前端的插件式测试工作台。提供抓包及mock基础功能,还可查看由可测性提供的应用状态数据。支持
自定义扩展在执行测试的同时并行的在后台进行检测,也支持自定义图形界面的插件扩展基本功能
业务场景
手工测试
自动化测试
测试工作台 - Lyrebird
小程序可测性改进
https://github.com/Meituan-Dianping/lyrebird
29
30. 手工应用
结合Lyrebird的可测性改进
30
31. 自动化应用
31
32. 其他应用
手工测试
视觉测试
自动化测试
可测性改进SDK
其他测试
能力
小程序
宿主应用
系统
Lyrebird
32
32
UI自动
化测试
健壮性
测试
33. 目录
01 认识小程序可测性
02 小程序可测性能力建设方案
03 实践:⻔票业务小程序测试经验
04 总结与展望
C3-机密文件 严禁外传
34. 可测性贯穿⻔票测试活动始终
业务测试活动
新需求测试
定向测试
回归测试
手工测试
线上巡检
自动化测试
通用、可扩展能力
小程序可测性改进
34
35. 新需求测试
进入填单⻚
返回上一级⻚面
再次进入填单⻚
产品预期:为减少用户操作路径,二次进入
填写购买信息:日期、数量、游玩人
填单⻚,需保持预填写的购买信息不变
35
36. 测试分析
再次进入填单⻚
操作路径细分
① 进入填单⻚
与缓存相关的技术实现分析
读取缓存,并将缓存内容渲染在特定模块进行展示
② 打开价格日历弹层,选择日期 选择日期后,暂存日期数据
③ 添加数量 添加数量后,暂存数量数据
④ 选择游玩人
⑤ 点击返回退出填单⻚
⑥ 再次进入填单⻚
36
添加游玩人后,暂存游玩人数据
将暂存的数据写入缓存
同步骤一
37. 测试分析
再次进入填单⻚
与缓存相关的技术实现分析
测试分析
如图所示从UI验证,也需要从数据
① 读取缓存,并将缓存内容渲染
验证,验证有读取的动作
② 选择日期后,暂存日期数据 暂存,保证正确的写
③ 添加数量后,暂存数量数据 暂存,保证正确的写
④ 选择游玩人后,暂存游玩人数据 暂存,保证正确的写
⑤ 将暂存的数据写入缓存
⑥ 再次进入填单⻚
37
校验写在缓存里,且
缓存里面确实有值
同步骤一
38. 测试分析
可测性分析 - 通过可观来校验“写”的正确性
① 进入填单⻚
② 打开价格日历弹层,选择日期
③ 添加数量
④ 选择游玩人
⑤ 校验写在缓存里,且缓存里面确实有值
退出填单⻚
⑥ 同步骤一
38
39. 测试分析
可测性分析 - 通过可控来快速达到
被测状态,校验“读"的正确性
进入填单⻚
① 如图所示从UI验证,也需要从数据验证,验证有读取的动作
② 打开价格日历弹层,选择日期
③ 添加数量
④ 选择游玩人
⑤ 点击返回退出填单⻚
⑥ 再次进入填单⻚
39
40. 已使用可测性能力
控制⻚面跳转 请求代理
控制登录 日志上报
控制缓存 隐私治理
控制前后端环境 录制回放
自动化交互控制
40
41. ⻔票业务保障
美团微信小程序⻔票业务自动化用例 326 个
⻔票微信小程序自动化用例 123 个
借助可测性使测试覆盖更全面,降低测试成本
至少 30% 的测试场景完全依赖可测性构造
场景构建
自动化场景数
自动化测试
手工测试
22年1月至23年5月自动化执行 1225 次
自动化⻚面覆盖 100% ,场景覆盖 80%+
保障上线
美团小程序发版一周一次,⻔票两周一发,点评三周一发,以22年以来计算,共保障81+40+27= 148 次上线
22年1月以来,视觉自动化辅助新需求和回归测试共发现 100+ 个有效问题
41
42. 目录
01 认识小程序可测性
02 小程序可测性能力建设方案
03 实践:⻔票业务小程序测试经验
04 总结与展望
C3-机密文件 严禁外传
43. 总结
业务场景
手工测试
小程序从不具备可测性能力到
自动化测试
通用、可扩展能力
以可测性改进为基础
小程序可测性改进
快速接入到店移动端测试工具链和测试体系
43
44. 展望
基础可测性能力建设
自动化测试建设
开源能力 — 通用
44
45. 开源能力
移动端测试工作台Lyrebird
https://github.com/Meituan-Dianping/lyrebird
vision-ui
https://github.com/Meituan-Dianping/vision-ui
标准化小程序可测性SDK逐步开源中…
45
46. Q&A
47. 更多技术干货
欢迎关注“美团技术团队”