APP专项测试
App专项测试
概述
- 测试的基本分类和使用的工具:
-
专项测试需要分析的主要常用问题
- 崩溃(Crash,弱网)
- 自动遍历、monkey测试、横竖屏切换、快进快退
- 卡顿(掉帧、gc、cpu)
- 卡顿测试、内存泄漏测试、method profile
- 响应慢(启动时间、交互相应、H5加载)
- 冷热启动、界面切换、H5性能测试
- 发热(cpu、mem、io、network、gps等硬件使用)
- method profile、gc统计、io统计、流量统计、硬件使用统计、耗电量分析
- 掉电快(硬件占用)
- 兼容性问题(机型覆盖、回归)
- 兼容性测试、自动化测试、自动遍历、monkey测试
- 崩溃(Crash,弱网)
-
Activity启动流程
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种方法
-
启动App并指定Activity
- 主要看TotalTime
adb -s 192.168.137.210:5555 shell am start -S -W $package/com.hjimi.cmptemdoor.activity.SplashActivityStopping: 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 -
通过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 -
通过录屏+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从启动到完成消耗的帧数,并计算时间
-
其他方法
- uiautomator等自动化工具每隔200ms查看pagesource,看页面有无变化
- traceview:了解一下即可
- 开发人员在程序中硬埋点,打印相关的时间
-
WebView性能分析
-
WebView和h5的区别和联系
- WebView简介
- WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是
webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器
- WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是
- WebView简介作用
- 显示和渲染网页
- 可与页面JavaScript交互,实现混合开发
- h5
- html协议的一个标准规范
- 二者联系
- Android APP中的WebView页面一般都是采用的h5页面
- WebView简介
-
chrome浏览器自带分析工具--F12键
- 整体界面
- 将鼠标放在下方的某一个资源的Waterfall字段上面,可以看到该资源的时间线
-
手机端WebView性能查看
- 模拟器:6.0默认支持查看,其他版本不支持
- 物理机:需要让开发打开App内开关
-
在模拟器或物理机打开webview页面后,在电脑上使用chrome浏览器中访问:chrome://inspect/,即可查看到该webview显示
-
如果显示布局有问题,则可以使用chrome62版本打开
-
通过js+w3c标准,获取webview性能数据
- w3c标准介绍地址:https://www.w3.org/TR/navigation-timing/
- 时序属性图
- 在chrome的Console中执行js脚本获取web性能数据
window.performance.timing window.performance.timing.responseEnd - window.performance.timing.responseStart- 使用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信息
-
-
卡顿影响因素
- 内存问题(内存抖动,full gc)
- cpu(计算耗时)
- render(布局复杂,overdraw)
-
帧分析
- 冰冻帧:一个帧超过0.7秒。会让人眼感觉到卡顿
- 帧分析:adb -s XXX shell dumpsys gfxinfo | less(这个方法不如systrace工具好)
-
工具推荐
- blockcanary
- FrameMonitor
系统资源分析
- CPU和GPU的关系
-
GPU渲染工具
-
Android开发者工具提供的性能调优工具
- GPU渲染分析:Profile GPU Rendering(GPU呈现模式分析)
- 选择第二个选项:在屏幕上显示为条形图
-
展示效果解析
- 每一个条形,代表绘制绘制这一帧消耗的时间
- 不同颜色代表UI绘制的不同阶段
- 条形图中间的一条横线,代表16ms 的绘制时间基准线
- 会显示app最近运行的128帧
-
-
mem统计
- 内存耗用名词解析
- VSS:衡量虚拟内存大小,无太大用处,无法知道分配的物理内存大小
- RSS:各进程的RSS相加,会超过真实的系统内存使用量
- PSS:各进程的PSS之和,就是真实的系统内存使用量
- USS:是PSS中自己独占的部分,不包含任何共享的部分
- VSS>=RSS>=PSS>=USS
- 使用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- 结果输出格式
- 使用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
-
GitHub下载地址:
-
依赖环境
- 需要安装golang语言
- 需要python2.7环境
-
执行语句
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 -

浙公网安备 33010602011771号