構建效能保障體系之自動化效能測試
阿新 • • 發佈:2022-03-06
本系列將圍繞如何構建客戶端效能保障體系,分別從開發週期的各個階段來討論構建完整的效能保障體系;
- 開發階段
靜態分析和程式碼風格一致性
模板程式碼
執行單測
- 測試階段
自動化效能測試
- 線上執行階段
APM 效能監控
效能測試是指收集每次版本迭代的效能差異,暴露程序啟動和執行時方法執行快慢、幀率等和體驗息息相關的指標。有些團隊會定義效能基線,每次迴歸測試時由人工執行一些主要用例。
對於效能測試而言,持續的效能測試是防止效能劣化非常有效的手段,而如何保證持續性,關鍵就是如何實現人工的替換,而儘可能採用自動化的執行方式;
本文將從實操的角度出發,概述如何實現完備的 iOS 自動化效能測試;
Instruments
Instruments 是 Xcode 工具鏈中重要的效能分析工具,能夠揭示大部分效能問題。在 Instruments 10 時迎來了重大重構版本的 Instruments。將介面和分析核心完全解耦,使開發者可以自定義模板,階梯性的定義開發者需要的初級、中級以及高階應用。 Instruments 10 將命令列工具整合到 xcrun xctrace 工具中,基於 xctrace 可以很方便的將分析結果 trace 檔案解析成 xml 讓其他工具鏈讀取。# 命令列啟動 TimeProfile 並匯出分析結果 xcrun xctrace record --template TimeProfile --launch --output ./output.trace longbridge-ios-app.app # 將分析結果匯出為 xml 格式 xcrun xctrace export --input ${trace} --toc --output ${exportXMLName}
執行時統計方法耗時
所有 OC 方法的呼叫都會走objc_msgSend
方法,所以理論上通過Hook objc_msgSend
方法 就可以統計所有方法的呼叫及耗時,而且很容易獲取到 Class 、SEL 等符號資訊。
iOS自動化測試
有了上面的獲取耗時的方法,我們還需要自動執行操作,iOS 自動化測試限於平臺限制,各個框架基本都是基於 WebDriveAgent 來實現的,這種方式有一定缺點,第一是比較慢,第二是無法保證測試任務的高可用性,實際測下來總有一些環節會失敗,所以需要增加必要的重試邏輯。 最好的方式是直接在 APP 內注入遠端呼叫控制邏輯,本文受限於開發週期而採用老牌的 Appium 來驅動: 對於測試指令碼,我使用的是 Nodejs,把方法耗時和 appium 結合以後,寫出來的測試程式碼大概是這樣: 最終匯出來的方法耗時效果:定位到耗時方法後,還可以通過 Git Log 來獲取到修改人,從而通知到相關開發,甚至自動的建立 jira 任務跟蹤修復情況。