Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google I:O 2023 Androidの自動テストアップデートまとめ / Google I:O 2023 Android Testing Update Recap

Google I:O 2023 Androidの自動テストアップデートまとめ / Google I:O 2023 Android Testing Update Recap

Shibuya.apk #42の発表資料です。
https://shibuya-apk.connpass.com/event/283427/

tkmnzm

May 26, 2023
Tweet

More Decks by tkmnzm

Other Decks in Technology

Transcript

  1. Google I/O 2023 Android
    の自動テスト
    アップデートまとめ
    Shibuya.apk #42
    Nozomi Takuma

    View full-size slide

  2. 自己紹介
    Nozomi Takuma
    株式会社ディー・エヌ・エー SWET
    グループ
    Android
    とテストが好き

    View full-size slide

  3. Google I/O 2023 Android
    のテスト関連セッシ
    ョン
    Scalable UI testing solutions
    How to test across all screen sizes

    View full-size slide

  4. Scalable UI testing solutions
    Espresso Device API
    Gradle Managed Device
    のFirebase Test Lab
    サポート
    スクリーンショットテスト

    View full-size slide

  5. How to test across all screen sizes
    様々な画面サイズに対応するためにテストするべきこと
    手動でのテストで使えるツール
    Large screen emulators & Resizable emulators
    デバイスミラーリング
    Multi Previews for Compose
    自動テスト
    様々な画面サイズのテストで使えるAPI
    window-testing, StateRestorationTester, Test Harness

    View full-size slide

  6. Scalable UI testing solutions
    Espresso Device API
    Gradle Managerd Device
    のFirebase Test Lab
    サポート
    スクリーンショットテスト

    View full-size slide

  7. Espresso Device API
    https://developer.android.com/studio/preview/features/#espresso-
    device-api
    デバイスの回転や折りたたみデバイスの開閉などのConfiguration
    change
    が発生した時のテストができる
    同期的に実行されるので、Configuration change
    を待ち合わせるた
    めのsleep
    が不要
    androidx.test.espresso:espresso-device

    View full-size slide

  8. Espresso Device API
    を使用するのに必要な環

    Android Studio Hedgehog Canary 2+
    Android Gradle 8.2+
    Android
    エミュレータ 33.1.10+
    API
    レベル 24
    以上のエミュレーター
    実機はPixel Fold
    、Pixel Tablet
    のみ対応
    持っていないけど実機使いたい場合はFirebase Test Lab
    を使う

    View full-size slide

  9. 画面回転のテスト
    //
    テスト起動時の初期状態を縦向きに設定する
    @get:Rule
    val screenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
    @Test
    fun testRotation() {
    //
    横向きにする
    onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
    // Espresso
    やComposeTestRule
    を使って状態をアサートする
    //
    同期してくれるのでsleep
    がいらない
    composeTestRule.onNodeWithTag("Agree Button").assertIsDisplayed()
    }

    View full-size slide

  10. Foldable
    端末のテスト
    @Test
    fun testFoldable() {
    //
    折り畳んだ状態にする
    onDevice().setClosedMode()
    //
    完全に開かれた状態にする
    onDevice().setFlatMode()
    }

    View full-size slide

  11. テストを実行するデバイスの指定
    Foldable
    端末用のテストを、Folable
    端末ではないデバイスで実行しな
    いようにする
    @Test
    @RequiresDeviceMode(mode = FLAT)
    fun test() {
    ...
    }

    View full-size slide

  12. Scalable UI testing solutions
    Espresso Device API
    Gradle Managed Device

    Firebase Test Lab
    サポート
    スクリーンショットテスト

    View full-size slide

  13. Gradle Managed Device
    https://developer.android.com/studio/test/gradle-managed-devices
    build.gradle
    にテストを実行するエミュレータの構成を定義すると、
    AVD
    作成からテスト実行までGradle
    が自動でやってくれる
    managedDevices {
    devices {
    pixel2api30 (com.android.build.api.dsl.ManagedVirtualDevice) {
    device = "Pixel 2"
    apiLevel = 30
    systemImageSource = "aosp"
    }
    }
    }

    View full-size slide

  14. Gradle Managed Device

    Firebase Test Lab

    ポート
    https://developer.android.com/studio/preview/features/#ftl-gmd
    GMD
    でFirebase Test Lab
    のデバイスが扱えるように
    firebaseTestLab {
    managedDevices {
    create("ftlDevice") {
    device = "Pixel3"
    apiLevel = 30
    }
    }
    }

    View full-size slide

  15. Scalable UI testing solutions
    Espresso Device API
    Gradle Managed Device
    のFirebase Test Lab
    サポート
    スクリーンショットテスト

    View full-size slide

  16. スクリーンショットテスト
    AGP8.2
    に、Local Test
    テストでCompose
    のプレビューのスクリーン
    ショットテストを実行できる機能を追加予定
    リファレンスの画像の保存と、リファレンス画像と現在の画像を比
    較するVisual Regression
    テストを実行するタスクが追加される
    Experimental
    なのでpreview
    のリリースノートを見てね

    View full-size slide

  17. スクリーンショットテスト使い方
    (
    予定
    )
    src/screenshotTest
    のソースセットを追加し、テストしたい
    Compose
    のPreview
    のコードを置く
    ./gradlew debugScreenshotTest –record-reference-images
    でリファ
    レンス画像の作成
    ./gradlew debugScreenshotTest
    でVisual Regression
    テストの実行

    View full-size slide

  18. Scalable UI testing solutions
    Espresso Device API
    Gradle Managed Device
    のFirebase Test Lab
    サポート
    スクリーンショットテスト

    View full-size slide

  19. How to test across all screen sizes
    様々な画面サイズに対応するためにテストするべきこと
    手動でのテストで使えるツール
    Large screen emulators & Resizable emulators
    デバイスミラーリング
    Multi Previews for Compose
    自動テスト
    様々な画面サイズのテストで使えるAPI
    window-testing, StateRestorationTester, Test Harness

    View full-size slide

  20. How to test across all screen sizes
    様々な画面サイズに対応するためにテストするべきこと
    手動でのテストで使えるツール
    Large screen emulators & Resizable emulators
    デバイスミラーリング
    Multi Previews for Compose
    自動テスト
    様々な画面サイズのテストで使えるAPI
    window-testing, StateRestorationTester, Test Harness

    View full-size slide

  21. window-testing
    Jetpack Window Manager
    のテストライブラリ
    WindowLayoutInfoPublisherRule
    でFoldable
    端末の折りたたみ状態
    をエミュレート
    使い方を学べるCodelab
    https://developer.android.com/codelabs/android-window-
    manager-dual-screen-foldables

    View full-size slide

  22. WindowLayoutInfoPublisherRule
    セットアップ
    androidTestImplementation "androidx.window:window-testing:$windowmanager_version"
    @get:Rule(order = 0)
    val publisherRule = WindowLayoutInfoPublisherRule()
    @get:Rule(order = 1)
    val activityRule = ActivityScenarioRule(MainActivity::class.java)

    View full-size slide

  23. WindowLayoutInfoPublisherRule
    @Test
    fun testFoldingFeature() {
    activityRule.scenario.onActivity { activity ->
    //
    折りたたみの状態を任意の設定にして上書きする
    val hinge = FoldingFeature(
    activity = activity,
    state = FLAT,
    orientation = VERTICAL,
    size = 2
    )
    val expected = TestWindowLayoutInfo(listOf(hinge))
    publisherRule.overrideWindowLayoutInfo(expected)
    }
    }

    View full-size slide

  24. val hinge = FoldingFeature(
    activity = activity,
    state = FLAT,
    orientation = VERTICAL,
    size = 2
    )

    View full-size slide

  25. val hinge = FoldingFeature(
    activity = activity,
    state = FLAT,
    orientation = HORIZONTAL,
    size = 2
    )

    View full-size slide

  26. StateRestorationTester
    Compose
    のConfiguration Change
    時の振る舞いをテストできる
    使い方を学べるCodelab
    https://developer.android.com/codelabs/basic-android-kotlin-
    compose-adaptive-content-for-large-screens
    セットアップ
    implementation platform('androidx.compose:compose-bom:2023.01.00')
    androidTestImplementation 'androidx.compose.ui:ui-test-junit4'

    View full-size slide

  27. StateRestorationTester
    @get:Rule
    val composeTestRule = createAndroidComposeRule()
    @Test
    fun stateRestoreTest() {
    val stateRestorationTester = StateRestorationTester(composeTestRule)
    stateRestorationTester.setContent { MyConmponent() }
    //
    再生成された状態をエミュレート
    stateRestorationTester.emulateSavedInstanceStateRestore()
    // assert
    }

    View full-size slide

  28. Test Harness
    Compose
    用のテストライブラリ(accompanist)
    ロケール、フォント サイズ、画面サイズに任意のものを指定して
    Compose
    のテストをすることができる
    セットアップ
    implementation "com.google.accompanist:accompanist-testharness:"

    View full-size slide

  29. Test Harness
    @Test
    fun test() {
    composeTestRule.setContent {
    // TestHarness
    でテストしたいComposable Function
    を囲む
    TestHarness(
    size = DpSize(800.dp, 1000.dp),
    fontScale = 1.5f,
    locales = LocaleListCompat.getDefault(),
    layoutDirection = LayoutDirection.Ltr,
    ) {
    MyConmponent()
    }
    }
    }

    View full-size slide

  30. まとめ
    Google I/O 2023 Android
    のテスト関連セッション
    Scalable UI testing solutions
    How to test across all screen sizes
    Pixel Fold
    やPixel Tablet
    の登場に合わせて、様々なデバイスに対応
    させるためのUI
    テストの手段が紹介されていた
    Local Test
    でのスクリーンショットテストと組み合わせたり、UI

    ストの幅が広がる期待感がありました

    View full-size slide

  31. 宣伝
    一緒に働いてくれるメンバーを募集中です!
    https://engineering.dena.com/team/quality/swet/

    View full-size slide