zoukankan      html  css  js  c++  java
  • app性能测试

     

    一、android的app性能测试包括的测试项: 

      响应、内存、CPU、FPS、GPU、耗电、耗流量

    二、响应

      1. 响应主要测试点:

        1. 启动:首次启动app的时间间隔(只是启动时间,不包括页面加载)

        2. 热启动:非首次启动  app的时间间隔(只是启动时间,不包括页面加载)

        3. 完全启动:从启动到首页完全加载出来的时间间隔

        4. 有网  启动:从发起跳转,到页面完全加载出来的时间间隔

        5. 无网启动:从发起跳转,到页面完全加载出来的时间间隔  (在项目中,主要测试关注点是冷启动,热启动) 

      2. 测试方法:

        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. 完全启动,无网启动,有网启动都可以通过fiddler抓包来获取启动的时间,通过设置网速和抓包,可以获取启动时  间,但是有一定的误差。在项目中,一般只需要测试冷启动,热启动便可

    三、内存

      测试点:

        1. 空闲状态:切换至后台或者启动后不做任何操作,消耗内存最少。

        2. 中强度状态:时间偏长的操作应  用。

        3. 高强度状态:高强度使用应用,可以跑monkey来测试(通常用来测试内存泄漏)。 

      内存泄漏:指应用里的内存一直没有释放,内存一直增加 ,系统内存一直减少 

      测试方法:

        1. 使用adb命令: adb shell dumpsys meminfo packageName 

         获取应用包名和Actively: adb shell dumpsys window | findstr mCurrentFocus

          

         测试关注点: 1. Native heap alloc:JIN的内存分配   2. Dalvik heap alloc:Java层的内存分配   3. PSS

          

         关注点:

          1. 退出某个页面后,内存是否有回落。 如果没有及时回落,且程序自动GC或者手动GC,那便可确认有问题。

          2. 进行某个操作后,内存是否增长过快。 如果增长过快,也有可能存在风险,需重复操作确认。测试方法:借助性能测试工具:GC、Emmagee(只支持安卓6.0及以下的版本)、iTest等工具均可以监控。

      android检查内存泄露步骤:

        1、运行Monkey进行压力测试:

          adb shell monkey -p cn.microinvestment.weitou --pct-touch 100 --ingore-crashes --throttle 1000 -s 100 -v -v 50

        2、监控内存值,如果出现过大等递增异常则保存HPROF文件(hprof文件是Java 虚拟机的Heap快照)用于分析查看应用内存的命令:

          adb shell dumpsys meminfo cn.microinvestment.weitou(进程名)

          如果发现内存过大,则保存HPROF文件:adb shell am dumpheap <进程名> <保存路径>

        3、分析hprof文件

          用工具MAT来查看,首先还要这个HPROF文件转换成MAT可读的文件

          在Android SDK tool里面有个hprof-conv命令:

          hprof-conv <原HPROF文件路径> <转换后的HPROF路径>

          hprof-conv a.hprof b.hprof

        4、用MAT工具打开转换后的HPROF文件

          一般选择Leak Suspects Report(通过SQL语句来查询对象有没有被释放掉,如果有多个相同的对象,则会存在内存泄露的问题)

    四、CPU

      1. 测试点:

        1. 在空闲时间(切换至后台)的消耗,基本没大应用使用cpu

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

        3. 在高负荷的情况下看CPU的表现(cpu占用应是在80%以上)

      2. 具体场景:

        1. 应用空闲状态运行监测CPU占用率 空闲状态:应用按Home键退到后台,不再占用系统的状态(通常  是灭屏半分钟后) CPU占用率=0% 

        2. 应用中等规格运行监测CPU占用率 中等规格:模拟用户最常见的使用场景;CPU占用率≤30% 

        3. 应用满规格长时间正常运行监测CPU占用率 Monkey测试;CPU占用率≤30% 

        4. 应用正常运行期间监测CPU占用率峰值 应用正常运行:打开应用进行基本操作;CPU占用率≤50%

      3. 测试方法:

        1. 使用adb命令:adb shell

          1. adb shell dumpsys cpuinfo | grep packagename

            

          2. top命令

            adb shell top -m 10 -s cpu   查看占用cpu最高的前10个程序(-t 显示进程名称,-s 按指定行排序,-n 在退出前刷新几次,-d 刷新间隔,-m 显示最大数量)

            adb shell top | grep PackageName  查询某个应用的CPU占用率(如果反复进行某个操作,cpu占用过高且一直无法释放,那便可能存在风险)

    五、TPS

      FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显  示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。  一般来说,Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡

    顿,要求每一帧的时间不超过  1000/60=16.6ms,这就是16ms的黄金准则,如果中间的某些帧的渲染时间超过16ms,就会导致这段时间的画面发  生了跳帧,因此原本流畅的画面变发生了卡顿。

      1. 测试方法:

        1. adb命令

          1. 打开手机:开发者选项—>profile GPU rendering(GPU渲染模式分析/GPU显示配置文  件/GPU呈现模式分析) —> in adb shell dumpsys gfxinfo

          2. 操作要测试的apk

          3. cmd窗口输入命令: adb shell  dumpsys gfxinfo packageName

          4. 得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比

            

             含义:

              Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间

              Process:表示渲染引擎执行显示列  表所花的时间,view越多,时间就越长

              Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间

              Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保存每秒60帧

          5. 通过excel进行表格处理可以直观的查看软件的流畅度

        2. 也可以使用第三方测试工具:Emmagee、GT等

    六、GPU

      GPU渲染是指在一个像素点上绘制多次(超过一次):显示一个什么都没有做的activity界面算作画了1层,给activity  加一个背景是第2层,在上面放了一个Text View(有背景的Text View)是第3层,Text View显示文本就是第4层仅仅  只是为了显示一个文本,却

    在同一个像素点绘制了四次,这是一定要优化的。过度绘制对动画性能的影响是极其严重  的,如果你想要流畅的动画效果,那么一定不能忽视过度绘制。 

      GPU过渡渲染不同的颜色代表不同的绘制程度

        1. 原色:无过渡绘制

        2. 蓝色:绘制一次 (理想状态)

        3. 绿  色:绘制二次

        4. 浅红:绘制三次 (可以优化)

        5. 深红:绘制四次 (必须优化) 

      测试指标:

        1. 控制过渡绘制为2x

        2. 不允许存在4x过渡绘制

        3. 不允许存在面积超过屏幕1/4的3x过渡绘制

    七、电量

      1. 测试场景:

        1. app运行但没有执行业务操作时的耗电量 

        2. app运行且密集执行业务操作时的耗电量 

        3. app后台运行的耗电量

      2. 测试方法: 

       方法1:

        1. 采用市场上提供的第三方工具,如金山电池管家之类的

       方法2:

        1.  android通过adb命令“adb shell dumpsys battery”来获取应用的耗电量信息,adb shell dumpsys battery set  level 100,修改电量

          

        2. iOS通过Apple的官方工具Sysdiagnose来收集耗电量信息,然后,可以进一步通过Instrument工具链 中的  Energy Diagnostics进行耗电量分析 

        3. 获取整个设备的电量消耗信息: adb shell dumpsys batterystats | more 

        4. 获取某个apk的电量消耗信息: adb shell dumpsys batterystats com.thestore.main | more 

        5. 手机当前使用的内存情况,各个线程的内存占用情况:adb shell dumpsys meminfo 

        6. 手机的电池信息:adb shell dumpsys batteryinfo 

        7. adb shell top -m 10 -s cpu CPU消耗前10的应用清单

    八、流量

      借助于Android和iOS自带的工具进行流量统计,也可以利 用tcpdump、Wireshark和Fiddler等网络分析工具

      1. 测试场景:

        1. app执行业务操作引起的流量 

        2. app在后台运行时的消耗流量 

        3. app安装完成后首次启动耗费的流量 

        4. app安装包本身的大小 

        5. app内购买或者升级需要的流量

      2. 测试方法:

        android系统 

        1. 网络流量信息通常存储在/proc/net/dev目录下,也可以直接利用ADB工具获取实时 的流量信息 

        2. 获取被测程序的uid,pid:adb shell ps |findstr com.thestore.main ;下面的uid:10129,pid:30608

        3. 也可以通过pid查询uid:adb shell cat proc/30608/status 

        4. 获取实时的累计流量信息: adb shell 

          cat /proc/uid_status/10129/tcp_rcv 接收流量信息--下行流量 

          cat /proc/uid_status/10129/tcp_snd 发送流量信息--上行流量 

        iOS系统

          可以使用Xcode自带的性能分析工具集中的Network Activity,分析具体的流量使用情况 

      3. 降低流量的场景方法: 

        1. 启用数据压缩,尤其是图片 

        2. 使用优化的数据格式,比如同样信息量的JSON文件就要比XML文件小 

        3. 遇到既需要加密又需要压缩的场景,一定是先压缩再加密 

        4. 减少单次GUI操作触发的后台调用数量 

        5. 每次回传数据尽可能只包括必要的数据 

        6. 启用客户端的缓存机制

  • 相关阅读:
    临时记事本
    D版??班得瑞英文天籁CD13集(下载!!!)
    一个程序员的早上
    使用C#实现Morse码的输出
    面向对象编程的乐趣(TextBox.Text="")
    如何从MS Word的表格中提取指定单元格的数据
    使用Turbo C创建自己的软件包(即创建接口)
    使用C#读取Word表格数据
    一种光栅绘制直线的方法
    关于数据库设计的一个思索这样做是不好的
  • 原文地址:https://www.cnblogs.com/littlefive/p/13154920.html
Copyright © 2011-2022 走看看