前言:App启动时间的测试的意义是对一个产品是否体验良好的标尺。平均每多一秒的启动时间,损失的用户数就会同比增加。一般大公司会在灰度期间做一轮启动时间的竞品测试,来对比本公司产品和竞争对手的app优劣。
一、安卓应用的启动时间计算
相对于ios而言,android的启动时间计算比较方便,只需要找到app的包名&启动Actibity即可。
1)获取包名:
adb shell pm list packages | grep app名称
2)获取启动Activity名:
adb shell dumpsys package 包名 | grep Start | grep Startup
3)获取app的启动时间(首先确认手机后台没有其他app进程):
adb shell am start -W 包名/启动Activity
4)结果如下
Status: ok
Activity: xxx/xxxx
ThisTime: 178
TotalTime: 178
WaitTime: 197
Complete
⚠️*以TotalTime为准
WaitTime 就是总的耗时,包括前一个应用 Activity pause 的时间和新应用启动的时间;
ThisTime 表示一连串启动 Activity 的最后一个 Activity 的启动耗时;
TotalTime 表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用 Activity pause 的耗时。
二、iOS应用的启动时间计算
iOS的启动时间计算比较复杂,此处我会用到录制视频+python的视频分帧方法去逐帧逐毫秒去统计启动时间(耗时较长,不建议在测试时间较短进行):
1)同样要确保苹果手机后台没有app运行
2)下载iTools进行录制启动期间的视频(如果有其他更好的,你也可以自行选择)
3)打开iTools录制,再启动目标app(其中会存在误差,因为存在iTools的运行)
4)利用python的CV2&number库去对视频拆帧计算启动时间(其中也存在一定的误差,因为启动的开始与结束时间是人为决定的)
⚠️启动时间以图标变暗为准、结束时间以主页页面加载完整为准
以下贴出部分python切帧的代码(可自行百度):
des = 'tx_ncache_'
for i in range(2,3):
vc = cv2.VideoCapture('D:/'+des+str(i)+'.mov') #读入视频文件
c=1
dir = 'D:/image/'+des+str(i)+'/'
if vc.isOpened(): #判断是否正常打开
rval , frame = vc.read()
print rval
else:
rval = False
timeF = 1 #视频帧计数间隔频率
while rval: #循环读取视频帧
rval, frame = vc.read()
if(c%timeF == 0): #每隔timeF帧进行存储操作
cv2.imwrite(dir+str(c) + '.jpg',frame) #存储为图像
c = c + 1
cv2.waitKey(1)
vc.release()
⚠️注意:测试启动时间可以以有缓存和无缓存、冷启动和热启动区分测试
(具体根据所给的测试时间和侧重点决定)
三、测试报告
这里给出一个较为好的竞品测试报告模版~