Android手机APK功耗、流量、内存测试方法

其中所用到的工具借鉴了目前大多是测试普遍用到的第三方监测APK,但较多博客都未对使用方法以及注意事项有详细的说明,个人整理一番,仅供借鉴和个人记忆

功耗

工具:耗电监控(PowerTutor)


1.使用PowerTutor检测耗电值

测试前先记录平均电压,可以使用一段时间手机,记录下手机不同耗电阶段时的电压,取平均数:

步骤:启动应用—》点击Stop Profiler—》点击System Viewer—》切换到Stat View视图页面,记录Voltage电压值


方法:

建议:

1.测试场景、执行步骤以及网络环境一致

2.可以使用bat或者python将个别简单步骤进行自动化实现,具体命令可百度

测试步骤:

3.启动应用,进入测试场景,保持1分钟以上,等待电压稳定

4.启动监测工具,点击“StarProfiler”激活检测程序,点击“ApplicationViewer”进入被检测应用列表,点击被测应用,进入详情信息可查看当前应用的LCD、CPU的功耗走势(ChartView)、占比饼图(PieView)、当前运行情况(StatView)关注AveragePower数据即可,即平均数值,待测试时间到达后,记录当前AveragePower数值即可

5.测试完毕后停止工具检测即可

流量、CPU、内存

工具:流量检测(ITest)


建议:

1.测试场景、执行步骤以及网络环境一致

2.可以使用bat或者python将个别简单步骤进行自动化实现,具体命令可百度

测试步骤:

1.启动测试工具,增加需监控的应用,设置监控指标以及根据需要进行logcat以及弱网的设置

2.启动被测应用,进入测试场景,等1分钟数据平稳

3.启动监测工具,点击启动监控案件

4.测试时间完成后,点击停止监控,数据保存到提示的存储目录

数据分析:

1.CPU:当前每次记录的耗损,计算平均值即可

2.内存:当前应用每次记录占用整机内存,计算平均即可

3.数据上传下载:记录的数据为持续增长性,即操作应用10分钟,导出的文本数据:[last数据-first数据=测试时间内消耗的数据流量]

android-【DDMS->heap】工具-内存检测工具(内存泄露的检测工具)内存测试:安装android-studio,安装SDK并配置

Heap监测应用进程-内存使用情况

1.      

打开DDMS视图

 

1. 启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的;


2.
将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试模式,而不是作为“Mass Storage”


3.
链接成功后,在DDMSDevices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息;


4.
点击选中想要监测的进程,比如system_process进程;


5.
点击选中Devices视图界面中最上方一排图标中的“Update Heap”图标;

6. 点击Heap视图中的“Cause GC”按钮(清理内存);


7.
此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况。
说明:
a) 点击“Cause GC”按钮相当于向虚拟机请求了一次gc操作;
b)
当内存使用信息第一次显示以后,无须再不断的点击“Cause GC”Heap视图界面会定时刷新,在对应用的不断的操作过程中就可以看到内存使用的变化;
c)
内存使用信息的各项参数根据名称即可知道其意思,在此不再赘述。
   
如何才能知道我们的程序是否有内存泄漏的可能性呢?

    这里需要注意一个值:Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类,类型的对象。

    data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。

可以这样判断:
a) 不断的反复操作当前应用,同时注意观察data objectTotal Size值;
b)
正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;
c)
反之如果代码中存在没有释放对象引用的情况,则data objectTotal Size值在每次GC后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大,
   
直到到达一个上限后导致进程被kill掉。
d)
此处已system_process进程为例,在我的测试环境中system_process进程,所占用的内存的data objectTotal Size,正常情况下会稳定在2.2~2.8之间,而当其值超过3.55后进程就会被kill

 

 

在我们的程序中,要是出现某个进程出现了不断增加的现象,可能该应用就存在泄漏的问题。如果某个进程在操作过程中出现程序崩溃,可能该应用程序已申请不到空间,可能存在内存泄露。

 

 

内存抖动:

使用AndroidStudio工具:


勾选EnableADBIntergration

勾选待测试的包以及选择视图

内存尽量测试单一场景,便于分析

内存泄漏场景设计思维:

在执行第一次时,进入测试场景GC后,若存在泄露,在第二次进入后,同样GC回收后,如果依然泄露,那么会在上一次基础上造成内存增长,保持一个持续增长的趋势,从而达到测试目的,也同样测试出在该场景可能存在泄露问题



猜你喜欢

转载自blog.csdn.net/github_35707894/article/details/52487491