快速测试Android应用性能
动机
这篇文章的目的是为了给懒人一个快速测试Android应用的方法. 能够在不多的时间内更有效率的发现移动应用的性能问题.
准备
在进行测试之前, 首先要确认一下是否已经准备好了所需要的工具:
- 待测应用(最好是debug版本)
这个不必多说, 功能不完备, 或者还存在突出功能bug的应用还是先修好再测试吧. 需要非混淆的debug版本是为了测试内存泄露.
- Android SDK 工具
Android SDK中提供了各种各样的工具, 我们可能会需要:
- adb
- DDMS
- hprof-conv (转换ddms上dump下来的prof文件用)
- 抓包工具Fiddler/Charles/Wireshark (会一种就可以)
- Android Studio
- MAT
- Uiautomator Viewer
开始测试
CPU占用
既然是快速测试,我们只关注一个点: 静默时的内存消耗
你可以进入自己想要测试的画面, 反复操作几次, 放置一段时间, 不需要太长, 半分钟就可以. 然后观察CPU的消耗.
如果对于数据展示不挑剔的话, 可以使用top命令:
adb shell "top -n 50 -d 1 | grep my.app.packagename$"
my.app.packagename是待测应用的包名
-n 参数代表输出行数
-d 参数代表输出的间隔
这段命令就是用top命令打印出来 my.app.packagename 这个包的cpu占用和内存使用情况, 每隔1秒, 打印出来一条, 一共输出50条
如果发现CPU的在应用的idle状态下仍然持续占用, 就说明是程序的bug了.
Android Studio中集成了CPU的观察工具, 如果是debug包, 可以通过Android Studio上的CPU窗口直观的观察CPU占用情况.
内存泄露
内存泄露是Android开发上很容易发现的问题. 可以集成第三方的泄露工具进行监控. 也可以使用DDMS + MAT(Eclipse Memory Analyser Tool) 进行分析. 需要debug且最好非混淆的apk包.
具体步骤:
- 从手机上进入应用, 进入要测试的页面, 进行操作. 这里建议同样的操作反复执行2~3次.
- 打开DDMS, 通过USB连接手机. 操作结束后GC 1~2次. 然后dump prof文件.
- 使用 hprof-conv 转化 prof 文件, 例如, 转换 xxx.prof 文件为 result.prof文件
hprof-conv xxx.prof result.prof
- 使用MAT打开转换后的prof文件. MAT会自动分析文件, 然后会提示你选择何种类型的报告, 不用选择任何形式的报告, 直接cancel.
- 点开 Histogram 在 Class Name 栏搜索 "activity". 搜索的结果上, Objects列不为1的对象就是泄露的对象.
流量占用
移动端的流量使用尽可能小, 接口调用次数尽可能少, 网络图片尽可能小, 数据传输不要太大.
通过抓包工具进行抓包. 抓到的结果中:
- 查看总的流量, 一般不要太大. 打开单个页面不宜超过 400KB. 因为3G下我们的网速可能会在50KB~80KB 之间, 使用5秒钟以上打开一个页面, 体验不会好.
- 查看单个链接, 不应该有重复的链接.
- 观察图片大小, 单张图片超过 50KB 都需要我们给与足够重视.
- idle状态下是不是会有持续的网络传输. 如果有, 就应该仔细调查一下.
图层
使用Uiautomator Viewer观察视图结构, 越复杂描画代价越高.
总结
性能测试包含其实很广, 也涉及到比较深入的内容. 本文希望能够通过尽量简单的步骤, 让每个人都能快速的发现应用瓶颈.