用户角度来说,APP 页面请求的响应时间包括:
用户界面发送请求的时间 + 网络传输时间 + 服务端处理时间 (包括数据层的处理时间)+ 网络传输时间 + 用户端展示返回结果的时间,如下图:
从概念上来说:响应时间,就是指应用系统从发出请求开始到客户端接收到所有数据所消耗的时间。该定义强调的是所有数据都已经被呈现在客户端所花费的时间。
需求:
一、APP启动时长
二、APP主要页面响应时长
一、APP启动时长测试
测试项:
1、刚下载后的启动时长;
2、下载后,启动过,杀死后台进程,在启动时长
3、下载后,启动后,置于后台,然后在启动到前台
4、应用界面切换时长
测试方案:
方法一:adb命令 adb shell am start -W -n packagename/activity
方法二: 抓取日志 (1)adb logcat -v threadtime >log.txt
(2)检索关键词: displayed
(3)检索需要的activity
故使用方法一测试1,2,3;方法二测试4,切换多页面求平均值
测试过程:
(1)下载APP,不启动 ------》adb shell am start -W -n com.gree.iems/.MainActivity ------》读取TotalTime的数值即可;
(2)下载APP,启动 ------》adb shell am force-stop com.gree.iems ------》adb shell am start -W -n com.gree.iems/.MainActivity ------》读取TotalTime的数值即可;
(3)启动APP ------》adb shell input keyevent 3 ------》adb shell am start -W -n com.gree.iems/.MainActivity ------》读取TotalTime的数值即可;
(4)启动APP,切换到不同功能页面 ------》adb logcat -v threadtime >log.txt ------》检索关键词: displayed ------》检索需要的activity------》读取TotalTime的数值即可;
(5)使用命令行方式统计多次启动某个Activity的平均用时可以在shell中执行如下指令:
adb shell am start -S -R 10 -W com.gree.iems/.MainActivity
其中-S表示每次启动前先强行停止,-R表示重复测试次数。每一次的输出如下所示信息。
Stopping: com.example.app
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.app/.MainActivity }
Status: ok
Activity: com.example.app/.MainActivity
ThisTime: 1059
TotalTime: 1059
WaitTime: 1073
Complete
其中TotalTime代表当前Activity启动时间,将多次TotalTime加起来求平均即可得到启动这个Activity的时间。
备注:实时监控当前正在运行的Activity命令
》adb shell
》logcat | grep ActivityManager
二、APP主要页面响应时长测试
测试方案:
1. 使用安卓自带 SDK 中的 adb shell screenrecord 录制操作屏幕(MP4格式)
2. 使用 ffmpeg 转换MP4 为 AVI 格式 (需要下载解码器FMP4,点击下载ffshow)
3. 使用视频分析工具(帧分析) VirtualDub
4. 找出用户点击屏幕的时间点和屏幕完全展示的时间点,两者差值就是app的响应速度
测试过程:
如何使用adb录制操作屏幕?
(1)安装adb
下载android-platform-tools 然后把路径添加到环境变量中
(2)连接手机或模拟机(记得数据线后连接手机)
打开开发者选项------》打开USB调试------》cmd窗口输入adb devices -l 检查连接是否成功
jiajiadeMacBook-Pro:~ jiajia$ adb devices
List of devices attached
S001070006321 device usb:338690048X product:G0215D model:G0215D device:G0215D transport_id:2
(3)录制视频
启动:jiajiadeMacBook-Pro:~ jiajia$ adb shell screenrecord /sdcard/demo1.mp4
停止:^C
说明:录制手机屏幕,视频格式为mp4,存放到手机sd卡根目录下,文件名为demo1.mp4,默认录制时间为180s。 可以使用Ctrl + C 停止录制
保存:
jiajiadeMacBook-Pro:~ jiajia$ adb pull /sdcard/demo1.mp4 /Users/jiajia/Desktop
/sdcard/demo1.mp4: 1 file pulled. 3.8 MB/s (7329786 bytes in 1.822s)
说明:导出视频的位置在桌面目录下,名称为demo1.mp4
如何获得Mac文件地址,把文件拉到终端,即可显示文件地址
备注:screenrecord是一个shell命令,支持Android4.4(API level 19)以上,支持视频格式: mp4
1. 指定视频录制时长,参数 --time-limit
adb shell screenrecord --time-limit 100 /storage/sdcard0/demorecord.mp4
2. 指定视频分辨率大小,参数 --size
adb shell screenrecord--size 1280*720 /sdcard/demo.mp4
说明:录制视频,分辨率为1280*720,如果不指定默认使用手机的分辨率,为获得最佳效果,请使用设备上的高级视频编码(AVC)支持的大小
3. 指定视频的比特率, 参数 --bit-rate
adb shell screenrecord--bit-rate 6000000 /sdcard/demo.mp4
说明:指定视频的比特率为6Mbps,如果不指定,默认为4Mbps. 你可以增加比特率以提高视频质量或为了让文件更小而降低比特率
4. 旋转90度,参数: --rotate
adb shell screenrecord--rotate /sdcard/demo.mp4
说明:此功能为实验性的,在nexus6设备上实验,录制的视频播放时也是旋转90度播放,体验不太友好。
D:\>adb shell screenrecord --help
Usage: screenrecord [options]
Android screenrecord v1.2. Records the device's display to a .mp4 file.
Options:
--size WIDTHxHEIGHT
Setthe video size, e.g."1280x720".Defaultisthe device's main
display resolution (ifsupported),1280x720ifnot.Forbest results,
use a size supportedbythe AVC encoder.
--bit-rate RATE
Setthe video bit rate,inbits per second. Value may be specifiedas
bitsormegabits, e.g.'4000000' is equivalent to '4M'. Default 4Mbps.
--bugreport
Add additional information, suchasa timestamp overlay, thatishelpful
invideos capturedtoillustrate bugs.
--time-limit TIME
Setthe maximum recording time,inseconds.Default/ maximumis180.
--verbose
Display interesting informationonstdout.
--help
Show this message.
(4)视频格式转换
1.下载离线包,点击下载
2.在安装目录下,shift+右键 打开命令行窗口 用命令进行格式的转换;
3.ffmpeg -i 原视频路径 转换后视频路径
eg: ffmpeg -i F:\appium\demo1.mp4 -b:v 1712k -bufsize 1712k -maxrate 1712k -vf scale=320:640 F:\appium\demo2.avi
注释:设置高码率使视频更清晰 -b:v主要是控制平均码率;-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动;但bufsize和-maxrate需要同时设置。
总比特率(码率) 就是 视频的比特率加上音频的比特率 1106+128
(5)视频帧分析
如何对录制视频进行帧分析?
实例说明
1. 寻找开始点
通过VirtualDub工具可以很容易的得到相关帧的数据,如下图。
从上图可以很清楚的看出,第69/70/71帧中,手指在逐步下降接近app图标;71帧的时候,手指达到最低点,之后,第72/73、74帧手指又逐步远离屏幕,因此第71帧(0:00:02:367)展示的基本就是用户点击屏幕的时间点。
2. 寻找结束点
通过VirtualDub工具可以很容易的得到相关帧的数据,如下图。
从上图可以很清楚的看出,从第100帧开始,应用的界面初步显示,直到第104帧完全显示出来;因此,第104帧就是用户界面完全展示的结束时间点(0:00:03:500)。
3. 计算响应时间
通过上面两个步骤得到了开始时间点(0:00:02:367)和结束时间点(0:00:03:500),这样两者相减就得出了app的响应时间为0:00:01:133,即1133ms。
特别说明
(1)为了尽可能的消除误差,这个过程最好重复5~10次,将测试结果取平均值;
(2)这种方法不仅仅能够测试app启动的响应时间,还可以验证app中某个功能的响应时间;
(3)手机app中某些界面的加载是依赖网络的,有时候这个响应时间受网络的影响比较大;
(4)这种方式也可以用来测试其它跟时间相关的场景。
参考资料:
http://blog.sina.com.cn/s/blog_6e22d8fb0102wobr.html
http://blog.sina.com.cn/s/blog_6e22d8fb0102wobr.html
http://blog.sina.com.cn/s/blog_7120c0be0100q5p7.html
https://blog.51cto.com/ournet/376882
https://www.jianshu.com/p/ddafe46827b7
https://www.jianshu.com/p/59a2ca7df681