App性能测试以及测试方法技巧

 性能专项我们关注哪些:

      1.关注资源消耗(CPU、内存、流量、功耗)

      2.启动耗时(冷启、热启),(这个也是很多云测时用到的一个指标)

      3.主要页面加载时间

      4.内存泄漏、抖动、卡顿、页面渲染(FPS)

今天我也只总结资源消耗这块,先谈谈CPU

普遍的apk性能测试,主要是以下七类

1、响应
2、内存
3、cpu
4、FPS (app使用的流畅度)
5、GPU过度渲染
6、耗电
7、耗流
(app除了这些性能测试,还有:手机版本号兼容性,屏幕分辨率兼容性,稳定性测试,安全测试等,后续会持续更新… 流量测试同这些一起更新,这里就不在说明了 )

一、响应
软件的响应时间和响应速度直接影响到用户的体验度,如果一个软件,迟迟加载不出来,会直接影响到软件的日活、留存。因此对于一个软件,对响应速度测试是必不可少的。

主要测试点:
1、冷启动:首次启动app的时间间隔(只是启动时间,不包括页面加载)
2、热启动:非首次启动app的时间间隔(只是启动时间,不包括页面加载)
3、完全启动:从启动到首页完全加载出来的时间间隔
4、有网启动:从发起跳转,到页面完全加载出来的时间间隔
5、无网启动:从发起跳转,到页面完全加载出来的时间间隔
(在项目中,主要测试关注点是冷启动,热启动)

测试方法:
1、使用adb命令
1) 冷启动
adb shell am start -W packageName/ActivityName(绝对路径,首个Activity)


含义:
ThisTime: 该Activity的启动耗时;
TotalTime: 应用自身启动耗时, ThisTime+应用application等资源启动时间;
WaitTime: 系统启动应用耗时, TotalTime+系统资源启动时间

2)热启动:按back按键后再启动adb命令


测试标准:冷启动时间不超过1.5s, 热启动不超过1s.

3)完全启动,无网启动,有网启动都可以通过charles抓包来获取启动的时间

charles是一个很强大的抓包工具,除了截取请求还能进行单接口压测,修改请求参数并发出请求,以及模拟无网,弱网,2G,3G,4G等。能解决app的很多专项测试。


限制网络情况需要用到charles的一个功能: Throttle Setting

通过设置网速和抓包,可以获取启动时间,但是有一定的误差。在项目中,一般只需要测试冷启动,热启动便可。

2、使用AndroidStudio的Android Monitor,查看手机日志系统输出
Android Monitor总共有5大模块:logcat, memory, cpu, network,GPU
我们可以通过logcat获取应用的响应时间(如何使用,内存中有介绍)

cpu检测我们要分3种情况:

1.在空闲时间的消耗,基本没大应用使用cpu

2.在运行一些应用的情况下,cpu已占50%的情况下,观察应用程序占用cpu的情况  

3.在高负荷的情况下看CPU的表现,我定义这个高负荷,cpu占用应是在80%以上

1.1 如何查看CPU的使用值

使用命令:adb shell dumpsys cpuinfo apk包名

从上图我们可以看出:6.4%是针对这个CPU的占用率是6.4%,标红的地方5.2%占用率是用户使用的,1.1是内核的占用率,这个数只是针对1核来说,

问题:现在手机都是多核的了,那这样的值也不会太准确,那怎么做?

经验:一般这种取值的,我在测试的时候,会多采集几次,求平均值

上面数据太多了,我们还可以可以用下面这个命令,和top命令,获取单个数据

adb shell dumpsys cpuinfo |grep packagename

2.内存篇

内存的方式和cpu类似,我们通过多次采集,得出内存值,看内存是否异常,那如何获取内存值

怎么取内存,用命令

1.adb shell dumpsys meminfo

2.adb shell meminfo PID

手机运行速度就和内存有很大关系,我记得以前的同事可以研究这个内存,还专门成立了一个小组,可见这个水还是挺深的,而且自己也是知会一点,着重有几个指标需要理解:

vss,虚拟内存 ,每一个应用时一个java虚拟机,系统会分配一个内存,内存每做一个操作,这样是控制内存的大小,但是不会大于最大限制,虚拟内存就就消失掉,我们比较关心

Rss 物理内存(包含共享库的内存),应用实际占用的内存,

pss实际使用的物理内存(比例分配共享占用内存) 如3个进程,那么进程的消耗就应该是除以3,才表示一个

USS 进程中独自占用内存

USS针对某个进程开始有内存泄漏的情况,是一个程序启动了会产生的虚拟内存,一旦这个程序进程杀掉就会释放   

这个博主我觉得讲的更好,我只是皮毛而已http://blog.csdn.net/bigconvience/article/details/35553983

n内存要多次测试

使用PID的方式查看:

我们关注的是:Heap size 是实际用到的内存       Heap alloc :是实际分配的值

问题:但是你可以发现alloc<size 为什么会这样,我现在还是不是很还能懂,他们一句话解释是说:进程使用的是虚拟内存,虚拟内存使用远大于物理内存,我现在还不是很懂,

内存我们还可以查看他的单个应用程序最大的内存限制

adb shell getprop |grep heapgrowthlimit

另外一种方式:我们还可以使用procrank工具,就可以查看内存值

3.流量

大神说可以使用adb shell cat/proc/“+PID+”/net/dev 的命令来查看流量数

但是我觉得这样不准确,我获取流量的方式是通过抓包的方式,在一个操作内,看流量中的消耗,可以借助wireshork这个工具来帮忙

大概以上是他提到的内容和自己的理解

总结:

做性能测试的方式有两种:1.竞品分析   2.版本对比  这是现在很多公司使用的一种方式

在说一句:腾讯的GT还是很好用的,网上可以下载,可以试试

猜你喜欢

转载自blog.csdn.net/testManger/article/details/116991049