APP测试-APP启动耗时
一、APP启动
APP启动一般分为冷启动和热启动;
-
“冷启动” 是指应用在安装后的第一次启动、重启,或者不在后台时的启动。
-
“热启动” 是指应用已经启动且正在后台运行 (但被暂停了) 时的启动。
二、环境准备
2.1 电脑端已安装配置adb环境
2.2 获取待测试APP的包名及Activity
2.2.1 手机连接PC后,打开待测试APP主界面
执行adb命令:adb shell dumpsys window |findstr mCurrentFocus
可获取到包名和Activity
三、APP启动耗时测试
方式一:使用adb shell am start-activity -W -n 包名/Activity名
3.1 热启动
执行如下命令:
adb shell am start -W -n com.xxxx.xxx/com.xxxx.xxx.xxActivity
说明:热启动时我们可以看到有Warning: Activity not started, its current task has been brought to the front,明显可以看出只是将应用调到前台
3.2 冷启动
将待测试APP手动从后台任务中杀掉或者使用命令kill应用进程
然后执行如下命令:adb shell am start -W -n com.xxxx.xxx/com.xxxx.xxx.xxActivity
说明:冷启动中我们可以看到没有Warning提示了
TotalTime: 487 单位毫秒,表示应用启动耗时
方式二:使用adb logcat,过滤Displayed 关键字
3.3 执行命令adb logcat |findstr Displayed 后,在手动打开待测APP
或者执行命令;adb logcat -s ActivityTaskManager |findstr "Displayed"后,再手动打开待测APP
说明:
-
TotalTime包含:进程启动(若需新建)、资源加载、onCreate()到onResume()全生命周期、View树构建和测量布局等
-
Displayed时间仅到:完成首帧渲染(调用reportFullyDrawn()前)
四、APP冷启动性能
4.1 为何只测试冷启动性能
冷启动可以确保应用每次启动时都经历相同的操作。应用被热启动时,我们没法明确知道哪些步骤被跳过,而哪些步骤被执行,也无法保证重复测试时所测试的内容是否一致;
冷启动是最坏的情况——这是用户经历启动过程时间最长的场景。测试时需要我们专注于最坏情况的统计数据,而不是状况最好的热启动。
4.2 测试步骤
性能测试需要多次去运行同样的测试用例,以排除结果中的可变因素。进行的运行次数越多,平均结果就越可靠。
确保每次冷启动应用(打开应用前先停止应用进程)
获取应用每次冷启动的时间并写入csv文件
返回TotalTime后可计算平均冷启动时间
将脚本保存为bat文件
Windows电脑双击startApp.bat运行,脚本如下:
说明:
“tokens=2”表示用tokens提取第二列的字符串
"delims=:"表示定义冒号“:”为分隔符,并用该分隔符“:”切分文本字符串
执行后,结果如下:
注:脚本中执行adb命令过滤字段值时需要注意‘|’的转义,否则无法取出TotalTime的值
'adb shell "am start -W -n com.xxxx.xxxx/com.xxxx.xxxx.xxx.xxActivity ^| grep TotalTime"'