使用 XCTest 測試動畫卡頓

爲何會出現卡頓?

iPhone 的頻率是 60 hz,平均每一幀的時間是 16.67 ms,當 APP 中的幀時間佔用大於 16.67 ms 時就會形成視覺上的卡頓。markdown

  • 經過兩種方式來表示:
    • HItch time:幀延遲顯示的時間(ms)。
    • Hitch ratio:每秒延遲的時間,ms/s。
  • Hitch ratio 的分級:
    • Good: ≤ 5ms/s
    • Warning: ≥ 5ms/s && < 10ms/s
    • Critical: ≥ 10ms/s

如何檢測卡頓?- XCTOSSignpostMetric

  • 使用 XCTOSSignpostMetric 的預備配置:防止這些配置影響測試結果
    • Scheme -> Test -> Build Configuration 調成 Release 。
    • xctestplan -> Configurations -> Automatic Screenshots 調成 Off。
    • xctestplan -> Configurations -> Code Coverage 調成 Off。
    • xctestplan -> Configurations -> Runtime Sanitization/Runtime API Checking/Memory Management 調成 Off。
  • XCTOSSignpostMetric 默認會測試 5 次。
  • 測試代碼:
func testScrollingAnimationPerformance() throws {
    // step1
    let app = XCUIApplication()
    app.launch()
    app.staticTexts["Meal Planner"].tap()
    
    let foodCollection = app.collectionViews.firstMatch
    // step2
    let meausreOptions = XCTMeasureOptions()
    meausreOptions.invocationOptions = [.manuallyStop]
    // step3
    measure(metrics: [XCTOSSignpostMetric.scrollDraggingMetric],
            options: meausreOptions) {
        // 向上滑動
        foodCollection.swipeUp(velocity: .fast)
        // 中止測試 
        stopMeasuring()
        // 向下滑動
        foodCollection.swipeDown(velocity: .fast)
    }
}
複製代碼
  • 代碼說明app

    • step1,進入到相關的測試頁面。
    • step2,配置 XCTMeasureOptions,表示咱們要手動中止每次測試。
    • step3,測試相關 XCTOSSignpostMetric 相關指標。
  • 添加手動中止、中止測試、向下滑動的代碼重置環境,是由於要保證每次測試的環境是一致的,這樣的測試結果纔會相對正確。post

  • XCTOSSignpostMetric 可測試的指標測試

    • navigationTransitionMetric:測試兩個 view 之間導航的動畫。
    • customNavigationTransitionMetric:測試兩個 view 之間自定義導航的動畫。
    • scrollDecelerationMetric:測試減速時的動畫。
    • scrollDraggingMetric:測試滑動時的動畫。
相關文章
相關標籤/搜索