腾讯WeTest的小程序兼容测试实践之路

作者 朱永俊,腾讯IEG高级工程师

商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。

作者导读

为了提升对微信小程序的测试能力, 腾讯WeTest质量开放平台推出了小程序整体质量解决方案,包括服务器压测、安全渗透和扫描、兼容适配、客户端性能等。本文介绍WeTest的小程序兼容测试方案,以及其中重要指标项的技术实践。

腾讯WeTest小程序兼容测试,依托平台丰富的真机机型,根据小程序/小游戏特点,覆盖异常打断、群分享等典型场景,记录性能指标,以及JS Error、首屏加载等特定数据,还原真实用户使用时发生的兼容/性能问题。

本文从以下几部分介绍腾讯WeTest的小程序兼容测试方案。

(1)小程序兼容测试整体流程

(2)统计指标项及方案选取

(3)小程序JS-SDK设计原理

(4)首屏加载时间计算原理

一、小程序兼容测试整体流程

整体流程如下:

1. 客户提交测试任务

腾讯WeTest小程序兼容测试平台上,上传接入JS-SDK的小程序/小游戏二维码,并提交兼容测试任务。

2. 驱动小程序/小游戏在多台真机上运行。

腾讯WeTest平台支持2种方式,来驱动小程序/小游戏在真机上运行:

(1)超级同步助手(以下简称超同)。基本原理是将测试同学对1只手机的操作,同步到若干台真机设备上。

(2)自动化探索。目前正在筹备中,近期上线。

本文以超同为例,介绍小程序/小游戏运行的兼容测试流程。

【超同工具前台】

(1)接取测试任务

(2)选取设备

(3)批量操控手机运行小程序/小游戏

4. 数据收集与报告展现。

在超同驱动小程序/小游戏运行的同时,以下信息将被统计:

(1)测试人员会观察记录UI适配、ANR问题等;

(2)性能采集模块进行性能指标的采集;

(3)小程序/小游戏中的JS-SDK也将采集到的页面事件、FPS、JS-Error等信息同步到数据存储后台;

(4)超同也会将测试过程中的截图、日志信息同步到数据存储后台。

最后由腾讯WeTest平台展示报告。整体流程如下图所示。

最终的web报告页中,将测试过程中收集到的测试信息,在web前端进行展示,举例如下:

(1)适配、ANR问题

(2)性能报告

(3)报告详情页

二、统计指标项及方案选取

在适配兼容测试中,除了由测试同学发现的UI适配、ANR问题外,腾讯WeTest小程序的兼容测试方案,还同时获得了如下统计项。

(1)常见性能指标、截图和adb日志

采集小程序/小游戏所对应的子进程的cpu、mem、net性能指标项,以及测试过程中的截图和adb日志。基本原理是利用adb命令进行统计,本文不再讨论。

(2)小游戏FPS指标

小游戏的FPS采集,从游戏引擎层采集更为准确,采用在工程中嵌入JS-SDK的方式来统计小游戏的FPS数据。设计原理详见第三部分。

(3)小程序页面事件

处理常规性能指标,小程序还需要加载时间、页面间的切换耗时等,可以通过统计小程序生命周期内的关键事件来计算。设计原理详见第四部分。

(4)JS-Error统计

可以利用wx.onError接口,将小程序/小游戏运行时的错误信息,包含堆栈,进行统计。原理见第五部分。

(5)首屏时间

把从小程序/小游戏启动算起,直到用户看到小程序/小游戏的界面的这段时间,叫首屏时间。首屏时间的长短,直接影响用户的体验。在第六部分,介绍首屏时间的计算方案,以及区分首次加载和 非首次加载的策略。

三、小游戏JS-SDK设计与流程

原理:与H5游戏的帧率的采集方案一致,通过JS层,来获得游戏引擎层的帧率,更为精确。当垂直同步信号过来之后,如果发生过绘帧,就记为1帧。在surfaceflinger层、opengl层来统计帧率获得的帧率,可能是不准确的。

通过hook当游戏引擎update入口和context的关键绘制方法,可以精确判断是否发生过绘帧。从而计算出FPS。在开发者工具的console命令行中将FPS输出,看到FPS获取的效果:

1. JS-SDK整体流程

(1)JS-SDK启动时,首先检查剪贴板内容格式,获得测试信息,用于请求腾讯WeTest API传输数据。

(2)在JS-SDK启动时,对context绘制方法进行hook。并计算帧率,同时保存首帧时间。

(3)不断每隔10s尝试对三种引擎的update进行hook。一旦完成hook,便恢复context绘制方法,按照新方法继续计算帧率。

(4)请求腾讯WeTest的API接口,把FPS数据进行传输。

整体流程如下。

四、小程序JS-SDK设计与流程

原理:在小程序工程中,定义App对象之前,完成对App、Page类的hook。hook后的效果,App、Page的对象的onXXX事件回调中,都增加了JS的代码。增加的JS代码做两件事情:

(1)统计page的path、titile、回调类型和时间;

(2)将统计的信息通过API接口传输到Web端。

有了小程序的各类页面事件信息之后,便可很容易的统计出,在测试期间,小程序的各个页面间的切换时间等信息。第六部分的首屏时间的计算,也依赖JS-SDK统计出的页面事件信息。

1. 小程序页面事件获取

通过hook方法,将App、Page的各回调中增加代码,来记录事件。

示例hook App对象的onLaunch方法:

App 和Page对象的方法与上面类似。

因为event事件里,统计了page的title信息,为了获得准确的title信息,还对wx. SetNavigationBarTitle方法进行了hook。其hook的原理是通过object.defineProperty来完成hook的。

在开发者工具的console命令行中输出获取到的事件,可以看到事件获取的效果:

2. JS-SDK整体流程

(1)JS-SDK启动时,首先检查剪贴板内容格式,获得测试信息,用于请求腾讯WeTest API传输数据。

(2)hook App和Page对象的事件回调方法,并特殊标记第一个Page的Onready事件。

(3)判断是否是首次加载。

(4)请求腾讯WeTest的 API接口定时发送事件信息。

整理流程如下:

五、JS-Error信息的采集

利用wx. onError回调,很容易完成对小程序/小游戏内JS运行脚本错误进行统计。需要注意的是,小程序和小游戏的错误堆栈信息的获取方式略有不同。

小程序:

游戏:

六、首屏时间计算原理

首屏时间:从小程序/小游戏启动算起,直到用户看到小程序/小游戏的界面的这段时间。

计算首屏时间,需要知道“开始时间”和“到达时间”便可计算出来。

1. 开始时间

通过adb命令,监控小程序/小游戏进程出现在前台的时间来近似获得。

2. 到达时间

(1)小程序。通过JS-SDK获得,使用第一个Page页面的OnReady事件的时间。

(2)小游戏。通过JS-SDK获得,使用游戏引擎绘制第一帧的时间。

【效果对比】

在手机上体验小程序/小游戏在IDE中的开发版时(注:此类型版本,有时效限制,不能用来做适配兼容测试),可以打开性能面板,其中有启动耗时的数据。

在ubuntu环境+ vivo x9plus手机,进程检测的周期设定为300ms(理论误差在300ms以内),分别对小游戏、小程序的非首次加载(有缓存),用计算出的首屏时间与性能面板中的“启动耗时”做对比,误差在190ms以内,符合预期,同时也是一个比较能接受的范围。

小程序:

轮次

进程拉起时间(首屏开始时间)

OnReady事件时间(到达首屏时间)

测试首屏时间(ms)

小程序自带性能面板<启动耗时>(ms)

误差(ms)

误差百分比

1

1561709017395

1561709022811

5416

5369

47

0.88%

2

1561709269802

1561709271822

2019

2020

-1

0%

3

1561709483194

1561709487344

4150

3973

177

4.5%

4

1561709636137

1561709639813

3676

3857

-181

4.7%

5

1561709771658

1561709775541

3883

3995

-112

2.8%

对比结论:计算得到的首屏时间,在微信小程序自带性能面板的时间上下波动,误差在185ms以内。

小游戏:

轮次

进程拉起时间(首屏开始时间)

引擎第一帧时间(到达首屏时间)

测试首屏时间(ms)

小程序自带性能面板-启动耗时(ms)

误差(ms)

误差百分比

1

1561710214782

1561710218869

4087

3992

95

2.3%

2

1561710357088

1561710361462

4374

4382

-8

0.18%

3

1561710503168

1561710507500

4332

4197

135

3.2%

4

1561710601829

1561710605931

4102

4246

-144

3.4%

5

1561710699758

1561710703939

4181

4066

115

2.8%

对比结论:计算得到的首屏时间,在微信小游戏自带性能面板的时间上下波动,误差在150ms以内。

3. 区分首次、非首次加载

小程序/小游戏,有无缓存对首屏时间的长短有直接影响,因此在测试首屏指标时,需要对本次测试是首次(无缓存)、非首次(有缓存)做区分。

原理:JS-SDK每次运行时,尝试去检查/创建 一个特定文件名的目录,来区分首次、非首次加载。

- 如果目录不存在,创建目录成功,那么是“首次加载”。

- 如果目录已存在,创建目录失败,那么是“非首次加载”。

本次主要介绍了腾讯WeTest在小程序兼容测试的流程,和重要、非常规指标项的获取的技术实践。

除了小程序的兼容测试外,腾讯WeTest借助AI技术,在保证原有质量下,大大提升在问题识别与测试驱动两个环节的效率和识别准确率,深度兼容测试服务直击底价,仅需原市场价三成。

如果使用当中有任何疑问,欢迎联系腾讯WeTest企业QQ:2852350015

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
腾讯WeTest的小程序兼容测试实践之路
作 者 朱永俊,腾讯IEG高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。 作者导读 为了提升对微信小程序的测试能力, 腾讯WeTe...
<<上一篇
下一篇>>