本文章转载于搜狗测试
Android应用的内存有多种字段组成,例如Native Heap、Dalvik Heap等等,这一数据可以通过adb命令adb shell dumpsys meminfo <指定包名>获得。小编今天要介绍的并不是dumpsys meminfo工具,而是介绍如果使用Python来记录meminfo的数据并绘制成曲线,方便对内存的分析。
程序下载地址
http://share.weiyun.com/19eda7180d626fcc190e670a321dd21c
源码下载地址
https://github.com/ZhugeDongming/memmonitor
实现效果
实现过程
下面小编介绍下该工具的大致实现过程和重点的代码。大致内容为:
1.Meminfo数据简介
2.使用Python对meminfo数据定期进行采集和保存
3.解析读取meminfo中的内存数据,保存至自定义数据结构
a.使用Python的类进行自定义数据结构封装
b.使用PyUnit对自定义的数据结构进行单元测试
4.将自定义数据结构中的数据写入Excel文件中,方便绘图
Meminfo数据简介
手机USB连接到电脑的情况下,在电脑的命令行下输入如下形式的命令即可获得指定包名的内存
adb shell dumpsys meminfo
例如:adb shell dumpsys meminfo com.sohu.inputmethod.sogou
各个字段的含义:
到这里我们已经了解meminfo命令的用法和大致内容。接下来,我们将使用Python编写脚本对meminfo数据进行定期采集、记录和保存。
Meminfo数据采集和保存
1.先对数据采集模块进行一个封装:
2.接着写个Main函数来运行
至此,对meminfo的数据就做到了可以指定appname进行采集和保存,保存路径<程序目录>\\result\\<日期命名>.log。
解析读取Meminfo内存数据
Python提供的list和dict数据功能强大,但是在此例中并不方便数据的记录和保存,因此我们先做一件事:
a.使用Python的类进行自定义数据结构封装
通过对meminfo的数据分析,我们对数据结构建模得到如下结构:
从上结构可以看到,这是一个三维的数据结构,如Native Heap下有PssTotal、PrivateDirty,而PssTotal和PrivateDirty下面要有一个list保存每次采集的数据。除了Native Heap,还有Dalvik Heap,Dalvik Heap也有PssTotal和PrivateDirty…..
基于此,我们封装一个数据结构,便于保存和使用以上的数据。
b.使用PyUnit对自定义的数据结构进行单元测试
作为测试,自己写的测试代码应该也要测测喽。为此我们选用PyUnit对以上数据结构的函数进行单元测试。
Step1:新建一个单测py文件
Step2:加载对应的模块和编写main函数。
Step3:编写两条测试Clist_coloum和Clist_type的单测用例
Step4:运行CListEx_UnitTest.py文件,测试通过。
Meminfo数据简介
为了方便绘图,一个好的办法是将解析后的数据保存至Excel中,后续直接使用Excel的折线图即可绘制相应的图形。
Step1:解析采集后的数据到自定义数据结构中
Step2:将数据保存至Excel文件。
这里Python操作Excel文件使用了两个功能强大的开源库,小伙伴们需要先安装xlwt(http://pypi.python.org/pypi/xlwt)到本地python库中,否则import xlwt会报错
至此,一个内存数据采集、分析和保存的小工具就做完了。
网友评论