移动性能测试 Android 性能测试初探 (三)

卡斯 · 2014年02月19日 · 最后由 sad_orange 回复于 2017年02月15日 · 2106 次阅读
本帖已被设为精华帖!

书接上文 Android 性能测试初探(二) 本文接着往下聊,今天主聊 CPU内存

看到这两个名词,做过 PC 性能测试的就比较熟悉了,同样的性能测试关注点 :)

首先说说内存,移动端关注的是内存消耗,这个测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性,当然关于内存测试,在这里我们需要引入几个概念,

  • 空闲状态
  • 中等规格
  • 满规格,

空闲状态:指打开应用后,点击 home 键让应用后台运行,此时应用处于的状态叫做空闲。 中等规格和满规格指的是对应用的操作时间的间隔长短不一,中等规格时间较长,满规格时间较短。

接下来我们说说在内存测试中,存在很多测试子项,如下清单所示

1.空闲状态下的应用内存消耗情况
2.中等规格状态下的应用内存消耗情况
3.满规格状态下的应用内存消耗情况
4.应用内存峰值情况
5.应用内存泄露情况
6.应用是否常驻内存
7.压力测试后的内存使用情况

说了一些关于内存测试方面的设定,接下来我们聊聊测试方法 DIY,现在关于 android 内存测试的方法基本分为几类,

1.使用 android 本身提供的 ActivityManager.MemoryInfo() 方法获得(此方法请百度或 google)此类第三方工具有如网易的 Emmagee、安测试、腾讯的 GT 等
2.使用 android 提供的 adb shell dumpsys meminfo |grep packagename >/address/mem.txt 来获取
3.使用 android 提供的 procrank

这里我们详解一下 procrank 方法(批处理)

首先去 google 获取 procrank、procmem、libpagemap.so 三个文件 .

然后 push 文件,执行 adb push procrank /system/xbin adb push procmem /system/xbin adb push libpagemap.so /system/lib

赋权 adb shell chmod 6755 /system/xbin/procrank adb shell chmod 6755 /system/xbin/procmem adb shell chmod 6755 /system/lib/libpagemap.so ,

在开启工具记录 adb shell procrank |grep packagename >/address/procrank.txt

剩下的就是整理测试数据了

关于内存泄露方面的测试,可以通过几个方面来测试

1.通过 monkey 压力测试记录内存使用情况,分析数据曲线图及日志情况
2.通过 eclipse 上的 mat+heap 来分析存在内存泄露方面的节点

说了这么多内存的,我们再来说说 CPU 方面的,CPU 跟内存一样,存在一些测试子项,如下清单所示

1.空闲状态下的应用 CPU 消耗情况
2.中等规格状态下的应用 CPU 消耗情况
3.满规格状态下的应用 CPU 消耗情况
4.应用 CPU 峰值情况

CPU 的测试方法分为几类
1.使用 android 提供的 adb shell dumpsys cpuinfo |grep packagename >/address/cpu.txt 来获取
2.使用 top 命令 adb shell top |grep packagename>/address/cpu.txt 来获取
恩,说了大半章了,cpu 及内存的测试相信各位应该有所了解了,下回继续聊其他测试项

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 22 条回复 时间 点赞

学习了, 问题主要集中报在内存这块.

感谢分享 不知楼主在性能测试方面的测试有无具体的标准? 比如 CPU 使用率应该在多少以下 PSS、VSS 不能超过多少之类的

标准肯定有的,都是基于分辨率来设定的

这个和华为的测试基准是差不多一致的哦~

怎么去 google 获取 procrank、procmem、libpagemap.so 三个文件?

关键是命令吐出来的,怎么去取?

菜鸟表示明白了一个大致的轮廓

内存泄漏的 bug, 你们发现了多少

泄露有很多~

我觉得安卓性能测试取数据都是次要关注的,毕竟方法就这么几种,工具网上也很多,测试人员应该重点关注测试方案,拿到 app 对 app 做哪些操作然后读取值,以及读取了内存值之后如何判断是否有异常

adb shell dumpsys meminfo packagename
为什么我每执行一次这个命令,packagename 的 Dalvik Heap 都会增大一点点,增大到一定程度就会回收一些,再继续增大,大家有遇到这样的问题吗?执行这个命令的过程中没有做任何操作啊

#10 楼 @w263044840 不能更同意,定个合理的标准也很重要

用 Android studio 去监控吧,还那么原始于 5 年前~

我是菜鸟的,希望楼主帮忙解答下我的疑问的:

  1. "通过 monkey 压力测试记录内存使用情况,分析数据曲线图及日志情况",请问这个是 monkey 的健壮性测试的那个命令吗? 2.通过 eclipse 上的 mat+heap 来分析存在内存泄露方面的节点”,这个里面说的节点,假如说内存泄露了,请问节点是什么样子的?曲线图大概什么样子的呢?

#13 楼 @shanghai_terry 用 android studio 如何监控?求教~

root 之后装个管理器,设置权限
adb push 文件的时候,我遇到的问题:
1、Read-only file system。
2、Operation not permitted
解决办法:
adb shell
$ su
# mount -o rw,remount /system
# chmod 777 /system
# cd system
# chmod 777 xbin
# cd xbin
# exit
$ exit
然后再执行 adb push 就可以了
以上供参考~

17楼 已删除

同问 android studio 如何监控,楼主能出点教程福利么。

恒温 [该话题已被删除] 中提及了此贴 07月18日 15:54
卡斯 [该话题已被删除] 中提及了此贴 07月18日 15:54

procrash 的三个文件不能 push 到系统目标文件夹怎么回事呢?已经给目标文件读写权限

#16 楼 @ping_sky 还是不行怎么办呢?

卡斯 #23 · 2016年08月08日 Author

@uuuu 你手机没有 root

“通过 eclipse 上的 mat+heap 来分析存在内存泄露方面的节点” 这块看了 GC root,但是看不明白

恒温 《Android 性能测试初探》合集 中提及了此贴 11月29日 15:15
卡斯 Android 性能测试初探 (四) 中提及了此贴 01月09日 14:50

内存泄漏测试,是否跟 Java 和 C++ 语言类别相关?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册