稳定性测试有哪些好用的方法和工具?
安卓绿色联盟的稳定性标准是如何制定的?
淘宝团队如何进行稳定性测试?
阿里巴巴高级测试开发专家梁剑钊为你解读。
梁剑钊
阿里巴巴高级测试开发专家
有 10 年以上质量保证体系建设经验,先后在 B2B、天猫负责测试架构、客户端测试,现在淘宝网负责搭建客户端回归治理体系。
安卓稳定性标准,有两大指标:
1、闪退率,闪退率包括 java 的闪退率,以及 native 闪退率。
2、ANR,就是应用没有响应。
1、启动崩溃率
启动崩溃率的标准定义是指一天出现的闪退率在应用启动数中的占比。
预置条件
a. 首先是应用中一天发生闪退总数;
b. 第二是应用一天中总的启动次数。
分母就是一天的总启动次数,分子是一天中发生的闪退总数。
判定标准
一般建议一天中启动崩溃率应该小于 0.2%,不过对于不同类型的 app 有会有一点不一样。
启动崩溃率更多的是看崩溃次数,是按闪退次数计算的。
2、用户或设备崩溃率
这是指一天中出现闪退的用户数或设备数,在整体活跃用户数中的占比。
预置条件
a. 获取应用一天中发生的闪推用户数(去重);
b. 获取应用一天中总体的活跃用户数。
判定标准
各类应用的冷启动时间应该小于五百毫秒。
需要特殊考虑事项
一天中用户或设备崩溃率应该小于千分之二,不同类型 app 可以有所不同。
标准涵盖三部分:
机型
要求覆盖 80% 的主流用户机型,比如说一个 app 里面,top10 机型中至少有八款要包含。主流的用户机型,往往与各应用软件统计数据有关,所以就需要准备用户常用机型,才能去做分析。
流程
首先要覆盖各个场景,场景包括全新安装,覆盖安装,冷启动、热启动,这些都要涵盖。
monkey 测试
具体标准是需要覆盖 70% 以上的页面,包括登陆,非登陆状态,并且经过八个小时不崩溃。
以上三点,必须同时达到,才算是满足稳定性标准。
崩溃时,需要把手机的一些基础信息进行上传,这些信息包括:
手机品牌、机型、操作系统、地理位置,运营商、网络类型、用户名等等;
闪退的堆栈信息;
崩溃前后用户的操作预置、系统预置信息。
尽可能多的将相关信息上传,才有利于这些工程师去排查问题。信息上传到后台以后,会有系统做特征聚合,机型、版本等等。
经过安卓绿色联盟与各大企业的联合讨论,给出了崩溃建议值:
稳定性方面,淘宝内部经过几年发展,也建设了非常多的稳定性工具,以下逐一介绍:
淘宝稳定性线下测试一般对遍历测试、暴力回放、monkey 测试、内存泄漏检测环节重点测试:
1、遍历测试
遍历测试是软件的遍历,界面上可点的元素点完后如果确定没有崩溃,一般就认为是崩溃率可接受。
目前淘宝对遍历测试的做法是利用一些开源软件,做二次改造。或深度优先进行定制,对页面元素做各种点击,确定没有问题。
测试方法
(1)目前淘宝团队用的是 Auto Traveler,这是 java 版本的,软件本身是开源的,根据需要,我们也做了定制,确保运行过程能够在指定的页面上进行。
(2)在 TesterHome 社区里一个软件叫 AppCrawler,一些团队也在用。
实践下来发现遍历测试也能帮助发现稳定性方面问题。
2、暴力回放
所谓暴力回放就是像平时一样使用这个软件,在使用过程中把操作序列录制下来,再设置不断重放的过程。比如将整个主链路,包括登录、访问商品详情、加入购物车、下单、退出的整个过程重放,来确定操作过程中没有内存泄露,没有崩溃过程。
按现在业界做法,会写 UI 自动化脚本重复循环播放,将睡眠时间缩短,不断重放,看看有没有崩溃。
测试方法
脚本录制完,经过多次重复,确定 App agent,App 页面在退出时,资源是得到释放的。它的架构就是手机上会装一个测试版本软件,软件的主要功能有:
a.APP agent 对象识别;
b.录制跟回放功能;
c.各种交验;
d.底下是测试的 SDK。
用户将整个录制脚本存到后端服务器后,可以在 web 界面上选择需要脚本以及重放次数,然后暴力回放过程在 web 上触发,运行的时候在手机上运行。
经过 N 多次重放以后,如果没有崩溃,或者是内存泄露问题,就可以往下走。暴力回放在实践过程中发现效果非常好。
3、monkey 测试
利用 adb 的 monkey 功能做扩展,确定软件没有问题。
测试方法
淘宝目前的做法是在 adb 的 monkey 基础上做扩展,主要扩展点有:
1、确保 monkey 测试不跳出特定页面。怎样确保呢?内部 app 里有路由跳转协议,在这个过程中可以做一些限定;
2、针对弹框做一些处理;
3、支持用户登陆;
4、去重。
monkey 实践下来,也有收获。不同团队对于 monkey 实现有所不同,有些团队会对线上用户行为进行改造,拿到线下重放看是否存在问题,这也是好思路。
4、内存泄漏检测
淘宝在测试版本软件里,加入检测插件,检测有没有内存泄露。
测试方法
利用 leakcanary 这款软件做扩展,同时结合 haha 软件做内存泄漏检测,两者结合也能暴露一些问题。
5、其他检测-telescop
开发工程师也会做一些其他检测,可以看下图的测试包。
这是淘宝内部的调试版本,它有一些比较高级的 feature,比如左边显示的内存泄露的检测、图片持有检测,以及过渡布局、资源泄露等等检测,右边看得到它能够检测线程创建、文件创建、线程阻塞、启动性能、页面加载方面的各种检测。
对于稳定性检测的指标如下:
淘宝基本上是围绕这些稳定性指标做各种各样的扩展和测试。除了上文介绍的偏线下环境的工具,内部也开发了很多线上工具,下文逐个介绍:
1、appdata
该平台主要是统计业务指标方面的信息,业务指标包括用户的情况,如用户 uvv、daur、mau 等等的指标,同时也包括了用户常用手机的一些信息,包括终端网络还有机型品牌、分辨率、网络状况等等,也能看到阿里某一款产品的手机占比情况。
2、崩溃处理平台 - 魔兔
崩溃处理的平台,我们内部叫魔兔。最关键的几个流程其实这样的: java 捕捉的未捕获异常,捕捉完等下一次再启动的时候,把异常以及手机信息、操作记录等都上传到后端,后端结合 mapping 文件做反混淆,聚合等处理。
魔兔功能:
a.聚合,会做闪退的聚合,比如相同堆栈闪退会放到一起去;
b.反混淆、符号化处理;
c.数据特征分析,比如用户的网络程式、机型等等;
d.大盘展现,也就是大盘数据;
e.实时告警,当有特别多问题的时候,会做各种警告。
下图就是魔兔平台,这里展示的是某一款软件 7.2.5 版本的一个数据,可以看得到各类指标,第二排,有 java 闪退次数、Native 闪退次数、java 闪退率、安卓 ANR 率、安卓主线程卡顿率、Native 闪退率、总体闪退率。下面还有影响设备数、用户闪退率、用户 ANR 率等数据。
从图中可见,也有趋势图,可以选择以某一天为基准,可以相比某一天是上升还是下降,当上升到一定程度会做实时告警。
另外,平台还有其他分类,比如业务类型,类型为业务错误阈值的时候,同时也选大内存图片,会看到底下有一些闪退的情况。总的讲,就是选择具体的场景点就能看到具体的信息。
根据聚合信息能够让工程师快速判断出,闪退率是不是只特定在某个版本上发生或某一个机型上发生,能非常快的定位问题。
目前阿里内部的闪退率已经降到 0.2% 以下,而双十二的版本闪退率比平时更低。
1、常见闪退类型
a.OutOfMemoryError,有些手机相对较老,在一些大图片分配内存的时候是有问题的。怎么规避呢?前面已经提到,有软件可以识别大对象、大图片;
b.NullPointerException,空指针理论上是可以扫描出来的,但是实践中还是会发现有一些遗漏数据。
c.IIIegalArgumentException
d.FileNoteFoundException,一般是图片在不同的机型上有异常。
2、稳定性相关工具
淘宝在双十一也曾出现在很多页面特效叠加的时候导致整个 APP 崩溃的情况,尤其对于老旧手机,这种情况更多。所以淘宝的工程师在双十一以后就特别关注内存相关的变化。阿里开发了 telescope 平台,里面有系统性能,应用性能,页面性能、公众反馈等功能,在这里可以看到系统性能的信息,包括 CPU、增率流量、内存。
除了阿里开发的稳定性相关平台,也可以看得到业界很多公司在做相关的努力,比如百度、友盟的统计软件,Bugly、网易云捕等工具。