启动时长:
启动时间对于App的性能测试,启动时间是个重要指标,启动时间分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有该App进程的情况),另一种是热启动,即App从被切换到前台(点back退出后再点击图标启动)。QA测试时,一般关注冷启动的启动时间。以下介绍三种测试启动时间的方法,供大家参考,可以有针对性的使用。
1.1 使用adb命令
1.1.1 测试方法 输入adbshell am start -W packagename/MainActivity命令,计算启动时间。

第一次启动也就是我们常说的冷启动,这时候你的应用程序的进程是没有创建的. 这也是大部分应用的使用场景.用户在桌面上点击你应用的 icon 之后,首先要创建进程,然后才启动 MainActivity.这时候adbshell am start -w packagename/MainActivity 返回的结果,就是标准的应用程序的启动时间。
关于ThisTime/TotalTime/WaitTime的区别,下面是其解释。WaitTime=endTime-startTime
startTime记录的刚准备调用startActivityAndWait()的时间点
endTime记录的是startActivityAndWait()函数调用返回的时间点
WaitTime = startActivityAndWait()调用耗时。
WaitTime 就是总的耗时,包括前一个应用Activity pause 的时间和新应用启动的时间;ThisTime 表示一连串启动Activity 的最后一个 Activity 的启动耗时;TotalTime表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause 的耗时。也就是说,开发者一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时。
总结一下,如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用有界面Activity启动耗时,参考ThisTime。
adb方法算出的时间是系统从开始处理启动activity的时间到完成运行layout和draw函数的时间,简单的理解就是启动这个Activity的时间,并不包括点击icon到系统接收到消息的时间。显然,这个时间并不能完整的模拟用户操作场景的启动时间。其次该方法只计算一个Activity的整体启动时间,没有分别统计其中每个函数的时间,不便于定位问题。
1.3.1 测试方法 在代码中打点,输出日志查看。拿贴吧举例,下图是整个启动要经历的操作。


通过打点输出日志来测试启动时间,QA就可以很方便的查看到具体每个模块的耗时时间
参考:https://blog.csdn.net/zhusongziye/article/details/79780572
fps:
原理:android系统中以60帧/s的帧率绘制,android提供了回调方法,FrameCallback.doFrame()方法,每绘制一帧就回调该方法,所以可以用该方法看掉帧,帧率啥的
https://www.jianshu.com/p/642f47989c7c
https://www.csdn.net/article/2015-06-12/2824949/3
CPU/内存
https://developer.android.com/studio/profile/cpu-profiler?hl=zh-cn
流量原理:
一般APP和后台服务器之间的通信都是基于TCP的,所以我们可以利用此统计来测试我们APP的流量,而且安卓提供的该统计功能是按照APP纬度来统计的。
步骤:
1.使用ps命令查看所测app的uid
2.进入/proc/uid_stat/10850目录,cat获取当前tcp_snd和tcp_tcv的初始值
3.此时可以开始测试了,测试完成后再次获取tcp_snd和tcp_tcv的值
4.所测时间内的流量计算
发送流量:tcp_snd_new-tcp_snd_old=2032150-893233=1128917bytes
接收流量:tcp_rcv_new-tcp_rcv_old=18648825-1350829=17297996bytes
第三方工具
原理:通过系统API来获取基本的流量数据。TrafficStats类提供了多个方法获取不同角度的流量数据,例如腾讯Gt、网易Emmagee、平安测试助手等
优势:简单快捷
劣势:
(1)这种方法统计不到一些系统的DNS等流量,还有不使用接口封装的模块产生的流量会被遗漏
(2)目前安卓6.0以上手机不再提供该API,所以安卓6.0以上手机均无法通过第三方工具获取流量数据
作者:萧竹
链接:https://www.jianshu.com/p/d3ce220664fe
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
耗电量
Android的很多特性都比较耗电(如屏幕、GPS、sensor传感器、唤醒机制、CPU、连网等的使用),我们必须要慎重检查APP的电量使用,以免导致用户手机耗电发热,带来不良体验。
原理:
各部件单位时耗电:各部件单位时耗电信息保存在power_profile.xml文件中,如下图(以魅族MX6为例)
电量(mAh)=各部件单位时耗电量(mA)*各部件运行时长(h)
image.png
测试步骤:
adb shell dumpsys batterystats
image.png
数据分析:
https://developer.android.com/studio/profile/battery-historian?hl=zh_cn
https://juejin.im/entry/6844903760297197582
网友评论