全自動化的抖音啟動速度測試
前言
- 專案介紹:https://testerhome.com/topics/19978
- 如何手動或自動進行app的啟動速度測試:https://testerhome.com/topics/22067
- 專案地址:https://github.com/williamfzc/stagesepx
- 例子地址:https://github.com/williamfzc/work_with_stagesepx
背景
我來啦,感謝社群的朋友們對這個專案的支援,這次有機會到MTSC2019深圳站上分享。雖然講得還不夠好,但是對自己也是一次難得的歷練機會。
開發維護至今,很開心能得知,已經有不少團隊將該工具落地到實際專案中,其中不乏來自各大廠的業務團隊們。這也是開源專案的意義之一。
當然,隨著使用範圍增大,功能更加複雜,我們也在不斷改進與優化這個工具。目前,stagesepx已經迭代了35個版本,穩定性與功能比起之前也不可同日而語。
在啟動速度測試這一塊上,應用已經趨向穩定。因此,本文將針對這一項,進行一個完整例子的講解。
起因
其實,對於一般應用來說,可以參考前言中 如何手動或自動進行app的啟動速度測試 的方式去做就可以。之所以會有這麼一項,是因為:
- 一些超級app的啟動過程非常複雜且可變
- 無法滿足遊戲的需求
簡而言之,也就是部分同學最關心的動態化問題。舉個例子,抖音的啟動過程是這樣的:
可以看到,它有五個階段(你也可以按照你的理解劃分):
- 初始階段(app沒開啟)
- 首屏(抖音字樣)
- 插屏廣告(可能有)
- 應用內首屏(視訊未載入,但主體控制元件已載入完成)
- 應用完成(視訊與控制元件均以載入完成)
看起來還好,但是:
- 插屏廣告每次開啟都不一樣,且不一定有
- 抖音的主頁是動態的,會大面積動,而且每次都不一樣
由於模型的限制,之前的 stagesepx 沒法滿足這個問題,所以,這類問題也成為它應用的瓶頸。
本篇文章將以抖音為例(此條五毛),描述現在的版本如何處理複雜情況下的啟動速度測試問題。
這裡選抖音只是因為抖音的啟動流程夠複雜,方便講解
流程
所有程式碼可以在 例子地址 找到。
場景設計
對於測試來說,場景與過程設計永遠是最重要的。如果標準都沒有定下來,操作沒有任何意義。
這裡我們的規劃保持與上面相同,五個階段。另外在本次測試中我們姑且認為:
應用完成的首點 - 初始階段的結束點 = 啟動耗時
(這裡自行根據實際需要去界定)
操作
這裡請先閱讀 如何手動或自動進行app的啟動速度測試 中的自動測試部分,操作流程差不多。這裡不會贅述
與上文一樣,我們可以利用幾個視訊,得到一系列的截圖。通過人工分揀,我們可以將截圖按我們上面設計好的類別進行歸類。訓練集大概是這樣:
然後一樣的,我們在上面進行訓練就可以得到我們想要的模型。
看起來與傳統模式非常相似,不同之處在於,在這種模式下我們不再使用傳統的SVM分類器,而改用keras支援的神經網路分類器。
當然,這一切對於使用者來說幾乎是無感知或不需要了解的,這也是我們在設計初期希望的,api保持穩定,使用者並不需要關心過多實現細節,能夠更快實現功能。
from stagesepx.classifier.keras import KerasClassifier
data_home = "./dataset"
model_file = "./keras_model.h5"
cl = KerasClassifier(
# 輪數
epochs=10,
# 保證資料集的解析度統一性
target_size=(600, 800),
)
cl.train(data_home)
cl.save_model(model_file, overwrite=True)
而程式碼上的修改也僅僅是從 SVMClassifier 替換為 KerasClassifier。那麼我們就可以利用這個訓練好的模型進行預測,並得到一個字典:
OrderedDict([('-3',
[<ClassifierResult stage=-3 frame_id=63 timestamp=1.062857142857143>,
<ClassifierResult stage=-3 frame_id=64 timestamp=1.0797278911564627>,
...
('0',
[<ClassifierResult stage=0 frame_id=1 timestamp=0.01687074829931973>,
...
從這個字典中我們可以知道,每一幀分別對應的:
- 被分類到哪一個類別
- 時間戳
- 幀編號
- ...
那麼理論上,我們可以由下一段指令碼來處理這些結果,達到自動計算的目的。回到我們一開始的設計:
應用完成的首點 - 初始階段的結束點 = 啟動耗時
對應到我們分好的類別(0、1、2、3、4),就是:
階段4[0] - 階段0[-1] = 啟動耗時
即可自動計算出耗時。在此基礎上,你可以根據實際需要進行額外的擴充套件,例如部署到jenkins上使其定時執行。
一些問題
看起來好像跟普通版本沒什麼變化,為什麼要用keras分類器?
神經網路的介入主要為了強化分類的普適性。例如,抖音的插屏廣告可能形態各異,而他們在被分類時又應該被分到同一個類別。讓SVM完成這項任務未免有些強人所難。
訓練完的模型效果並不好
動態情景下最大的問題是,每個階段的表現可能是不相同的。以插屏廣告為例,每次開啟時插屏廣告都不一樣,此時我們需要擴大訓練集,儘量讓模型找到廣告之間的共性,能夠正確地將他們劃分到同一類別。
對於抖音的例子,我這邊大概用了四個視訊作為訓練集,此後的預測基本可以滿足要求。當然對於真實的業務來說,你完全可以繼續增大你的訓練集,使其穩定性更強。
切換到keras,效能是否有影響?對硬體(GPU)是否有要求?
誠然,神經網路的計算量相比之前要大許多,但並沒有想象中那麼大。
- 模型並不複雜
- 場景要求不高(僅做單標籤分類)
- 訓練集很小(百級別)
在這種情況下,用cpu訓練已經足夠。參考資料:
- 200張圖片
- epoch = 10
- MacBook Pro 2019 16g
- 耗時3分鐘左右
- 最終accuracy: 0.9871
除此之外,在切換到神經網路之後,雖然在訓練過程上我們需要花費更多的時間,但分類的效率被極大地提高了。總的來說,這個結果是非常積極的。
最後
任何建議與意見可以留言或到主庫留issue~
相關文章
- 自動化測試系列 —— UI自動化測試UI
- 自動化裝置測試與自動化測試的區別
- 【自動化測試入門】自動化測試思維
- 無程式碼的啟動速度測試 with stagesepx
- 測試開發全棧之 Python 自動化全棧Python
- 自動化測試的方向
- 如何學習自動化測試?從手工測試到自動化測試的過程…
- 採用自動化測試的情形及自動化測試的優缺點
- 如何做自動化測試?什麼是自動化測試?
- PHP 抖音機器人 抖音自動找好看的小姐姐?,自動點贊 + 關注PHP機器人
- 自動的自動化:EvoSuite 自動生成JUnit的測試用例UI
- API自動化測試API
- 自動化測試框架框架
- 自動化測試理解
- 自動化測試思路
- 介面自動化測試
- airTest自動化測試AI
- selenium自動化測試
- 自動化測試篇
- python自動化測試Python
- jest 自動化測試
- GAutoNext 全平臺遊戲自動化測試利器遊戲
- API自動化測試平臺,高效實現對API的自動化測試API
- 自動駕駛測試全流程自動駕駛
- 軟體測試:自動化測試
- 測者的測試技術手冊:自動的自動化EvoSuite 自動生成JUnit的測試用例UI
- 測試開發之自動化篇-自動化測試框架設計框架
- 2023年好用的自動化測試框架有哪些?如何提高自動化測試效果?框架
- 利用tox打造自動自動化測試框架框架
- 自動化測試面試點面試
- “自動化測試解放雙手”,測試自動化好處大盤點!
- Web自動化-Selenium自動化測試-4-編寫測試用例Web
- 功能測試、自動化測試、效能測試的區別
- 自動化測試系列(三)|UI測試UI
- 手工測試和自動化測試 BattleBAT
- 小程式自動化測試--測試3
- 自動化測試工具QTPQT
- 自動化測試平臺