Android app客户端性能测试工具Emmagee 浅析

简介

Emmagee是网易杭州研究院qa团队开发的一款用于监控安卓客户端性能的小工具,可以监控指定被测应用在使用过程中器的启动时间、CPU、内存、流量和电量变化情况,用户可自定义配置监控的频率以及性能的实时显示,并最终生成一份性能统计csv文件,支持Android2.2及以上版本。

主要功能

1、检测当前时间被测应用的CPU使用率以及总体CPU使用量。

2、检测当前时间被测应用占用的内存量、百分比,剩余内存量。

3、检测应用从启动开始到当前时间消耗的流量数。

4、测试数据写入到CSV文件中,存储在手机/storage/sdcard0目录下,同时支持以邮件形式发送文件。

5、可以选择开启浮窗功能,浮窗中实时显示被测应用占用性能数据信息。

6、在浮窗中可以快速启动或者关闭手机的wifi网络。

使用方法

1、安装Emmagee应用。

apk本地下载:Emmagee_2.4.apk,外网下载:http://code.google.com/p/emmagee/downloads/list

2、启动Emmagee,列表中会默认加载手机安装的所有应用。

3、选择需要测试的应用,点击“开始测试”,被测应用会被启动。

224554_FHBY_1041545

 

4、开始测试,测试过程中会自动记录相关性能参数。

5、测试完成后回到Emmagee界面,点击“结束测试”,测试结果会保存在手机指定目录(一般为“/storage/sdcard”下)的CSV文件中。文件名称类似“Emmagee_TestResult_20180326150532.csv”

生成的CSV文件内容见图:

6、使用Excel打开CSV文件,绘制统计图。

实现原理

1、监控CPU的实现原理

Android系统是基于Linux内核的,所以系统文件的结构和Linux下一样,系统总体CPU使用信息放在/proc/stat文件下,/proc/cpuinfo文件存放CPU的其它信息,包括CPU名称,直接读取即可。Emmagee是将选中应用的PID传入,读取/proc/PID/stat文件信息及可获取该PID对应程序的CPU信息。


2、监控内存的实现原理  

内存和cpu的处理方式类似。先获取到当被测应用的PID,然后按照PID从 /proc/meminfo文件中获取当前被测应用占用的内存信息。

3、监控流量消耗的实现原理

系统中有存放整体流量和针对当程序的流量统计,/proc/net/dev和/proc/uid_stat/UID下存放tcp_rcv和tcp_send文件,分别存放下行流量和上行流量,操作前后相减就得出结果 。


4、监控电量的实现原理

电量、电压和温度情况是通过监听系统的电池管理事件的广播来获取的。


电流是通过读取系统文件的方式获取。不同品牌的机型,保存实时电流的文件路径和名称略有差异。


5、监控启动时间的实现原理

我们点击界面的开始测试时,程序会启动EmmageeService,之后所有的数据统计以及更新都是EmmageeService进行处理的。 EmmageeService会在onStartCommand()里面启动一个线程“handler.postDelayed(task, 1000)”,进行数据的更新同时会尝试通过ActivityManger从logcat中获取到软件的启动时间。


6、监控fps的实现原理

 


红色框框内的东西就是通过调用一个管理Android帧缓冲区的系统服务SurfaceFlinger来获取用于计算fps的帧数据,具体可参考: Android fps的计算方式

注意事项

1.Emmagee在默认加载软件列表的时候实际上过滤掉了系统程序,只显示第三方的应用程序。这样会导致可能我们需要测试的系统程序在列表里找不到。 


红色框框里面排除的东西,第一个是系统程序,第二个是Emmagee自己PACKAGE_NAME = "com.netease.qa.emmagee")。 

所以如果需要测试系统程序时,记得要注释掉这行代码再重新编译apk。

2.启动时间的计算主要是读取系统日志(“ "logcat -v time -d ActivityManager:I *:S"”),因此只有应用程序有读取系统日志的权限时才会去获取启动时间和写入启动时间数据到csv文件。



源码获取

项目对外开源,源码地址: https://github.com/NetEase/Emmagee 有兴趣的同学可以下载捣腾、二次开发......

向开源精神致敬!

猜你喜欢

转载自blog.csdn.net/iamhuanggua/article/details/79165981