APP专项测试

App专项测试

概述

  • 测试的基本分类和使用的工具:
image-20200623142843943
  • 专项测试需要分析的主要常用问题

    • 崩溃(Crash,弱网)
      • 自动遍历、monkey测试、横竖屏切换、快进快退
    • 卡顿(掉帧、gc、cpu)
      • 卡顿测试、内存泄漏测试、method profile
    • 响应慢(启动时间、交互相应、H5加载)
      • 冷热启动、界面切换、H5性能测试
    • 发热(cpu、mem、io、network、gps等硬件使用)
      • method profile、gc统计、io统计、流量统计、硬件使用统计、耗电量分析
    • 掉电快(硬件占用)
    • 兼容性问题(机型覆盖、回归)
      • 兼容性测试、自动化测试、自动遍历、monkey测试
  • Activity启动流程

    image-20200624103416181

App启动性能

  • App启动性能指标

    • 冷启动
      • 第一次安装后启动,或在内存中完全杀掉App进程,再次启动
      • 一般5秒内
      • 是启动时间中最重要的指标
    • 暖启动
      • App在后台驻留时间过久,被杀掉,但是有一些页面被缓存在本机,再次打开App时,这些页面会直接读取。比热启动慢一些
      • 一般2秒内
    • 热启动
      • App在后台还有效,切换回来
      • 一般1.5秒内
    • 首屏启动
      • 算上other stuff加载的时间,比如启动的广告。冷启动、热启动、暖启动都不算other stuff的时间。
  • adb命令清除App缓存并启动

    • 指定包名

      package=com.hjimi.cmtemdoor
      
    • 清除缓存

      adb -s 192.168.137.210:5555 shell pm clear $package
      
    • 关闭App

      adb -s 192.168.137.210:5555 shell am force-stop $package
      
  • 查看App启动时间的3种方法

    1. 启动App并指定Activity

      • 主要看TotalTime
      adb -s 192.168.137.210:5555 shell am start -S -W $package/com.hjimi.cmptemdoor.activity.SplashActivity
      
      Stopping: com.hjimi.cmtemdoor
      Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.hjimi.cmtemdoor/com.hjimi.cmptemdoor.activity.SplashActivity }
      Status: ok
      Activity: com.hjimi.cmtemdoor/com.hjimi.cmptemdoor.activity.SplashActivity
      ThisTime: 629
      TotalTime: 629
      WaitTime: 639
      Complete
      
    2. 通过adb logcat查看App启动情况

      $ adb -s 192.168.137.210:5555 logcat |grep -i displayed
      06-28 11:15:09.404   414   519 I ActivityManager: Displayed com.hjimi.cmtemdoor/com.hjimi.cmptemdoor.activity.SplashActivity: +654ms
      06-28 11:15:09.594   414   519 I ActivityManager: Displayed com.hjimi.cmtemdoor/com.hjimi.cmptemdoor.activity.SignInActivity: +234ms
      06-28 11:15:53.317   414   519 I ActivityManager: Displayed com.hjimi.cmtemdoor/com.hjimi.cmptemdoor.activity.SplashActivity: +657ms
      06-28 11:15:53.499   414   519 I ActivityManager: Displayed com.hjimi.cmtemdoor/com.hjimi.cmptemdoor.activity.SignInActivity: +218ms
      06-28 11:27:17.059   414   519 I ActivityManager: Displayed com.hjimi.cmtemdoor/com.hjimi.cmptemdoor.activity.SplashActivity: +530ms
      06-28 11:27:17.231   414   519 I ActivityManager: Displayed com.hjimi.cmtemdoor/com.hjimi.cmptemdoor.activity.SignInActivity: +215ms
      
    3. 通过录屏+ffmpeg工具拆帧方法,查看App从启动到完成的时间

      • 先去官网下载ffmpeg,然后加入到环境变量
      • 录屏20秒针,录的视频存在设备/sdcard/Data/cmtemdoor.mp4目录下
      adb -s 192.168.137.210:5555 shell screenrecord --bugreport --time-limit 20 /sdcard/Data/cmtemdoor.mp4
      
      • 将视频拉取到电脑上
       adb -s 192.168.137.210:5555 pull /sdcard/Data/cmtemdoor.mp4 .
      
      • 使用ffmpeg进行拆帧,每秒拆为10帧
      ffmpeg -i .\cmtemdoor.mp4 -r 10 frames_%03d.jpg
      
      • 查看生成的200帧图片,看App从启动到完成消耗的帧数,并计算时间
      image-20200628142332031
    4. 其他方法

      • uiautomator等自动化工具每隔200ms查看pagesource,看页面有无变化
      • traceview:了解一下即可
      • 开发人员在程序中硬埋点,打印相关的时间

WebView性能分析

  • WebView和h5的区别和联系

    • WebView简介
      • WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器
    • WebView简介作用
      • 显示和渲染网页
      • 可与页面JavaScript交互,实现混合开发
    • h5
      • html协议的一个标准规范
    • 二者联系
      • Android APP中的WebView页面一般都是采用的h5页面
  • chrome浏览器自带分析工具--F12键

    • 整体界面

    image-20200628153320581

    • 将鼠标放在下方的某一个资源的Waterfall字段上面,可以看到该资源的时间线

    image-20200628160022949

  • 手机端WebView性能查看

    • 模拟器:6.0默认支持查看,其他版本不支持
    • 物理机:需要让开发打开App内开关
image-20200628161016693
  • 在模拟器或物理机打开webview页面后,在电脑上使用chrome浏览器中访问:chrome://inspect/,即可查看到该webview显示

  • 如果显示布局有问题,则可以使用chrome62版本打开

  • 通过js+w3c标准,获取webview性能数据

    image-20200629144135367

    • 在chrome的Console中执行js脚本获取web性能数据
    window.performance.timing
    window.performance.timing.responseEnd - window.performance.timing.responseStart 
    

    image-20200629150938605

    • 使用python获取web性能数据
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('https://ceshiren.com/')
    print(driver.execute_script('return JSON.stringify(window.performance.timing)'))
    

卡顿分析

  • systrace工具

    • sdk自带的工具,目录:sdk\platform-tools\systrace

      • 要求必须是python2.7的环境,经测试2.7.18可用

      • 需要具备win32con环境,如果没有,则需安装

         pip2 install pypiwin32
        
    • 执行:

      • 在systrace工具目录下
      PS D:\androidsdk\platform-tools\systrace> python .\systrace.py
      These categories are unavailable: disk
      Starting tracing (stop with enter)
      
      • 此时已经开始记录,可以操作APP,操作完成后,在命令行中按enter键就会结束记录。
      • 结束后会自动开始分析,稍等一会儿就会分析完成,并给出分析结果存放路径。html可以直接打开
      PS D:\androidsdk\platform-tools\systrace> python .\systrace.py
      Starting tracing (stop with enter)
      Tracing completed. Collecting output...
      Outputting Systrace results...
      Tracing complete, writing results
      
      Wrote trace HTML file: file://D:\androidsdk\platform-tools\systrace\trace.html
      
    • result信息

    image-20200630162616434

    image-20200630162745042

  • 卡顿影响因素

    • 内存问题(内存抖动,full gc)
    • cpu(计算耗时)
    • render(布局复杂,overdraw)
  • 帧分析

    • 冰冻帧:一个帧超过0.7秒。会让人眼感觉到卡顿
    • 帧分析:adb -s XXX shell dumpsys gfxinfo | less(这个方法不如systrace工具好)
  • 工具推荐

    • blockcanary
    • FrameMonitor

系统资源分析

  • CPU和GPU的关系

image-20200630165135433

image-20200630165259596

  • GPU渲染工具

    • Android开发者工具提供的性能调优工具

      • GPU渲染分析:Profile GPU Rendering(GPU呈现模式分析)
      • 选择第二个选项:在屏幕上显示为条形图
    • 展示效果解析

      • 每一个条形,代表绘制绘制这一帧消耗的时间
      • 不同颜色代表UI绘制的不同阶段
      • 条形图中间的一条横线,代表16ms 的绘制时间基准线
      • 会显示app最近运行的128帧

image-20200630170927412

image-20200630171544165

image-20200630171738526

image-20200630171922166

image-20200630172055279

image-20200630172203067

  • mem统计

    • 内存耗用名词解析
      • VSS:衡量虚拟内存大小,无太大用处,无法知道分配的物理内存大小
      • RSS:各进程的RSS相加,会超过真实的系统内存使用量
      • PSS:各进程的PSS之和,就是真实的系统内存使用量
      • USS:是PSS中自己独占的部分,不包含任何共享的部分
      • VSS>=RSS>=PSS>=USS

    image-20200630182005187

    • 使用adb procstats命令查看设备内存占用情况(分别是过去1小时的平均情况和当前情况)
    adb -s 192.168.137.170:5555 shell dumpsys procstats --hours 1
    adb -s 192.168.137.170:5555 shell dumpsys procstats --current
    
    • 结果输出格式

    image-20200630192213922

    image-20200630192249627

    image-20200630192357739

    • 使用adb meminfo命令查看机器内存占用情况
     adb -s 192.168.137.170:5555 shell dumpsys meminfo
     -- 指定APP
     adb -s 192.168.137.170:5555 shell dumpsys meminfo com.hjimi.cmtemdoor
    
  • 流量分析

    • 查找app对应的uid命令
    adb -s 192.168.137.170:5555 shell dumpsys package com.hjimi.cmtemdoor | findstr userId
    
    • 查看网络流量命令
    adb -s 192.168.137.170:5555 shell dumpsys netstats
    adb -s 192.168.137.170:5555 shell dumpsys netstats  | findstr userId的数值
    

耗电量分析

  • 使用工具battery-historian

    git clone git@github.com:google/battery-historian.git
    cd battery-historian
    go get -d -u github.com/google/battery-historian/...
    go run setup.go
    go run cmd/battery-historian/battery-historian.go
    
posted @ 2021-05-20 18:36  王滚滚啊  阅读(284)  评论(0)    收藏  举报