LoginSignup
3
2

【Android】公式から Compose のスクリーンショットテストツールがついに登場!

Last updated at Posted at 2023-05-11

はじめに

Google I/O '23 にて、Host-side Screenshot Testing と呼ばれるスクリーンショットテストのためのツールが発表されました。

これまで PaparazziShowkase といったサードパーティのライブラリを組み合わせてスクリーンショットを撮っていたかと思いますが、ついに公式でサポートされる形になりそうです。

Host-side Screenshot Testing は記事執筆時点で未リリースです。Android Gradle Plugin 8.2 でリリース予定とアナウンスされています。また 実験的な機能のため内容が変更になる場合があります。

セットアップ

  • Android Studio Hedgehog と Android Gradle Plugin 8.2 の環境を用意します。
  • mainandroidTest ディレクトリと同じ場所に screenshotTest ディレクトリを作成します。こちらがスクリーンショットテストのための sourceSet になるようです。
    image.png
  • スクリーンショットテストの対象にしたい Composable の Preview を screenshotTest 内に作成します。通常の Preview と同じように書けばOKです。
    image.png

スクリーンショットテストを実行する

リファレンスの作成

リファレンスを生成するために以下の Gradle タスクを実行します。成功するとプロジェクト内にスクリーンショットが保存されます。
image.png

リグレッションの検知

生成したリファレンスをもとにリグレッションの検知を行うには以下の Gradle タスクを実行します。
image.png

実行結果は HTML 形式のレポートで見ることができます。差分があれば分かりやすく表示されるようです。
image.png

Host-side Screenshot Testing のすごいところ

  • 追加のライブラリが不要
  • Jetpack Compose の Preview をそのまま流用できる
  • 実機で実行するよりもかなり高速
  • 実行環境に関わらず手元のマシンであっても複数の条件(画面サイズ、Theme など)でテストすることができる

Host-side Screenshot Testing の気になること

記事執筆時点では手元で試せないため、現時点で気になることを以下にまとめます。

  • Multipreview annotations に対応しているか
  • 一定量スクロールした状態でスクリーンショットを撮るような動的なシナリオはサポートされているか(おそらくサポート外で、Espresso 等で実現することが想定されていそう)
  • Jetpack Compose に加えて View もサポートされているか(おそらくサポート外。AndroidView でラップすればできるかも?)
  • スクリーンショットをプロジェクトのディレクトリ以外の場所に置く方法はあるか(言い換えるとスクリーンショットをコミットに含めない方法はあるか)

まとめ

Google I/O '23で発表された Host-side Screenshot Testing についてまとめました。追加のライブラリが不要で通常の Preview をそのまま使えて、しかも複数の条件でスクリーンショットテストを簡単に行える点が特徴です。気になる点も残っていますが、実際に使えるようになるのがとても楽しみです。

動画

9:09〜 から

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2