Android 自动化测试中性能数据获取方式及耗电测试方法与注意事项

Android 自动化测试中性能数据获取方式及耗电测试方法与注意事项

 

我们比较关注的Android性能数据主要有这些:CPU,内存,耗电,帧率,线程,流量

 

下面分别说明下这些数据的获取方式,计算方法与注意事项

 

  1. CPU

自动化获取需要区分ROM,否则会出现显示数据不全的问题

SDK > 25机型:

使用命令行:adb shell  top -s 1 -o %CPU -o ARGS -n 1 过滤获取对应进程的CPU性能数据

SDK < = 25机型:

使用命令行:adb shell  top -n 1 获取对应进程的CPU性能数据

 

每1S获取一次数据,直到测试完成,记录测试期间的平均值和峰值,后期可以形成取消曲线图方便查看。

 

注意事项:

a)获取数据不要太频繁,根据经验1-3S比较合适。

b)内存数据和CPU数据同时获取会导致获取的CPU数值有3%左右的增加,如果需要精确获取需要内存和CPU分开测试,做横向版本对比的话这点可以忽略。

c)需要注意应用是否有多个进程,有的话需要同时都获取并求和

d)手机多核的CPU数据会超过100%,需要使用命令: adb shell cat /proc/cpuinfo 统计” processor”出现的次数即为CPU核心数,获取手机核心数后,除以核心数:

Android 自动化测试中性能数据获取方式及耗电测试方法与注意事项

  1. 内存

使用命令行:adb shell dumpsys meminfo + pro(进程名) 获取对应进程的内存性能数据,取TOTAL 行总大小。

Android 自动化测试中性能数据获取方式及耗电测试方法与注意事项

每1S获取一次数据,直到测试完成,记录测试期间的平均值和峰值,后期可以形成取消曲线图方便查看。

注意事项:

a)获取数据不要太频繁,根据经验1-3S比较合适。

b)需要注意应用是否有多个进程,有的话需要同时都获取并求和

 

  1. 帧率

使用命令行:dumpsys gfxinfo  +  pro (进程名)+  reset 每次获取前需要清空一下数据

使用命令行:dumpsys gfxinfo  + pro(进程名) 获取帧率 Total frames rendered 和 Janky frames 数值,使用算法  total / (total + janky) * 60 计算当次帧率数值。

 

每1S获取一次数据,直到测试完成,记录测试期间的平均值和最小值,后期可以形成取消曲线图方便查看。

 

注意事项:

a)获取数据不要太频繁,根据经验1-3S比较合适。

b)获取主进程数据即可

 

  1. 流量

 

监控流量可以区分流量是移动还是wifi,不过我们一般只要关注总流量即可,获取计算方法:

//uid为被测试应用的uid

long up = TrafficStats.getUidTxBytes(uid);

long receive =TrafficStats.getUidRxBytes(uid);

总使用流量为:up(上传) + receive(下载)

测试流量总消耗为:测试前获取一次数据,测试后获取一次数据,两者的差值即为流量总消耗。

自动化测试时,需要添加if else判断,如果上面方法获取的数据为 -1,需要使用如下方法去获取数据:

方法:getTotalBytesManual(uid);

方法实现主要代码:

File uidFileDir = new File("/proc/uid_stat/" + String.valueOf(uid));

File uidActualFileReceived = new File(uidFileDir, "tcp_rcv");

File uidActualFileSent = new File(uidFileDir, "tcp_snd");

通过读取uidActualFileReceived uidActualFileSent 文件的数据和来计算上行与下载的总流量

测试流量总消耗同样为:测试前获取一次数据,测试后获取一次数据,两者的差值即为流量总消耗。

 

  1. 线程监控

 

如果从A页面跳转B页面后退出到A页面,新增的线程没有释放,则可能存在内存泄露问题;

如果反复进入退出A页面,线程重复创建而不会销毁,则也存在内存泄露问题。

对于这种问题我们改如何感知和监控测试呢,下面提供一下线程监控的思路:

 

SDK > 25机型:

使用命令行:adb  shell  ps  –T 过滤获取应用的所有线程

SDK < = 25机型:

使用命令行:adb  shell  ps  –t 过滤获取应用的所有线程

 

通过A,B页面线程差值,获取退出B页面的新增线程情况,对新增可疑线程进行确认;

通过反复进入退出A页面后获取应用相同和线程池线程数量来对可疑线程进行确认。

 

  1. 耗电测试

 

a) PC连接手机打开电池数据的获取以及重置:

   adb shell dumpsys batterystats --enable full-wake-history

   adb shell dumpsys batterystats --reset

b) 拔掉手机执行操作步骤

c) 执行操作后连接电脑执行如下操作:

   SDK => 24机型:

   adb bugreport bugreport.zip

   SDK < = 24机型:

   adb bugreport > bugreport.txt

d) 分析数据:安装battery historian 分析工具上传bugreport.zip或者bugreport.txt进行分析。

从这个网址进行分析工具服务安装:https://github.com/google/battery-historian

其中a-c步骤可以使用自动化case进行操作

Android 自动化测试中性能数据获取方式及耗电测试方法与注意事项

 

以上就是Android常用性能测试数据的获取方法和注意事项。