前言:App啟動(dòng)時(shí)間的測(cè)試的意義是對(duì)一個(gè)產(chǎn)品是否體驗(yàn)良好的標(biāo)尺。平均每多一秒的啟動(dòng)時(shí)間,損失的用戶數(shù)就會(huì)同比增加。一般大公司會(huì)在灰度期間做一輪啟動(dòng)時(shí)間的競(jìng)品測(cè)試,來(lái)對(duì)比本公司產(chǎn)品和競(jìng)爭(zhēng)對(duì)手的app優(yōu)劣。
一、安卓應(yīng)用的啟動(dòng)時(shí)間計(jì)算
相對(duì)于ios而言,android的啟動(dòng)時(shí)間計(jì)算比較方便,只需要找到app的包名&啟動(dòng)Actibity即可。
1)獲取包名:
adb shell pm list packages | grep app名稱
2)獲取啟動(dòng)Activity名:
adb shell dumpsys package 包名 | grep Start | grep Startup
3)獲取app的啟動(dòng)時(shí)間(首先確認(rèn)手機(jī)后臺(tái)沒(méi)有其他app進(jìn)程):
adb shell am start -W 包名/啟動(dòng)Activity
4)結(jié)果如下
Status: ok
Activity: xxx/xxxx
ThisTime: 178
TotalTime: 178
WaitTime: 197
Complete
??*以TotalTime為準(zhǔn)
WaitTime 就是總的耗時(shí),包括前一個(gè)應(yīng)用 Activity pause 的時(shí)間和新應(yīng)用啟動(dòng)的時(shí)間;
ThisTime 表示一連串啟動(dòng) Activity 的最后一個(gè) Activity 的啟動(dòng)耗時(shí);
TotalTime 表示新應(yīng)用啟動(dòng)的耗時(shí),包括新進(jìn)程的啟動(dòng)和 Activity 的啟動(dòng),但不包括前一個(gè)應(yīng)用 Activity pause 的耗時(shí)。
二、iOS應(yīng)用的啟動(dòng)時(shí)間計(jì)算
iOS的啟動(dòng)時(shí)間計(jì)算比較復(fù)雜,此處我會(huì)用到錄制視頻+python的視頻分幀方法去逐幀逐毫秒去統(tǒng)計(jì)啟動(dòng)時(shí)間(耗時(shí)較長(zhǎng),不建議在測(cè)試時(shí)間較短進(jìn)行):
1)同樣要確保蘋(píng)果手機(jī)后臺(tái)沒(méi)有app運(yùn)行
2)下載iTools進(jìn)行錄制啟動(dòng)期間的視頻(如果有其他更好的,你也可以自行選擇)
3)打開(kāi)iTools錄制,再啟動(dòng)目標(biāo)app(其中會(huì)存在誤差,因?yàn)榇嬖趇Tools的運(yùn)行)
4)利用python的CV2&number庫(kù)去對(duì)視頻拆幀計(jì)算啟動(dòng)時(shí)間(其中也存在一定的誤差,因?yàn)閱?dòng)的開(kāi)始與結(jié)束時(shí)間是人為決定的)
??啟動(dòng)時(shí)間以圖標(biāo)變暗為準(zhǔn)、結(jié)束時(shí)間以主頁(yè)頁(yè)面加載完整為準(zhǔn)
以下貼出部分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(): #判斷是否正常打開(kāi)
rval , frame = vc.read()
print rval
else:
rval = False
timeF = 1 #視頻幀計(jì)數(shù)間隔頻率
while rval: #循環(huán)讀取視頻幀
rval, frame = vc.read()
if(c%timeF == 0): #每隔timeF幀進(jìn)行存儲(chǔ)操作
cv2.imwrite(dir+str(c) + '.jpg',frame) #存儲(chǔ)為圖像
c = c + 1
cv2.waitKey(1)
vc.release()
??注意:測(cè)試啟動(dòng)時(shí)間可以以有緩存和無(wú)緩存、冷啟動(dòng)和熱啟動(dòng)區(qū)分測(cè)試
(具體根據(jù)所給的測(cè)試時(shí)間和側(cè)重點(diǎn)決定)
三、測(cè)試報(bào)告
這里給出一個(gè)較為好的競(jìng)品測(cè)試報(bào)告模版~
