Firebase Test Lab は、Android アプリをテストするためのクラウドベースのインフラストラクチャです。Android Studio と完全に連携しており、インストルメンテーション テストの実行とテスト結果の確認を行えます。
このガイドでは、Test Lab と統合してテストを実行するために、Android Studio でインストルメンテーション テストを変更する方法について説明します。Android Studio の UI から Test Lab を使用して、テスト マトリックスの作成、インストルメンテーション テストの実行、テスト結果の確認を行う手順については、Firebase Test Lab でテストを実行するをご覧ください。
スクリーンショットをキャプチャする
Test Lab では、インストルメンテーション テストの実行時にスクリーンショットをキャプチャできます。スクリーンショットをキャプチャする方法については、プロジェクトにスクリーンショット ライブラリを追加するをご覧ください。
Espresso テスト レコーダーを使用してテストを作成する
Espresso テスト レコーダー ツールを使用すると、テストコードを記述しなくてもアプリの UI テストを作成できます。デバイスでの操作を記録し、アサーションを追加して、アプリの特定のスナップショットの UI 要素を検証できます。Espresso テスト レコーダーは、保存された記録を受け取り、対応する Espresso UI テストを自動的に生成します。生成されたテストは Test Lab でアプリをテストする際に使用できます。
詳しくは、Espresso テスト レコーダーで UI テストを作成するをご覧ください。
Test Lab のインストルメンテーション テストの動作を修正する
Test Lab では、インストルメンテーション テストに追加できるシステム変数が用意されています。この変数を使うことで、Test Lab でインストルメンテーション テストを実行する際に、自身のデバイスやエミュレータで実行する場合とは違う動作をさせることができます。
次のコード例では、システム プロパティ firebase.test.lab
を読み取り、テストが Test Lab で実行されている場合は文字列 testLabSetting
の値を true
に設定します。続いて、この文字列の値を使用して、追加のステートメントが実行されるかどうかを制御します。
Kotlin+KTX
val testLabSetting = Settings.System.getString(contentResolver, "firebase.test.lab") if ("true" == testLabSetting) { // Do something when running in Test Lab // ... }
Java
String testLabSetting = Settings.System.getString(getContentResolver(), "firebase.test.lab"); if ("true".equals(testLabSetting)) { // Do something when running in Test Lab // ... }
Firebase Test Lab プラグインを介して Gradle で管理されているデバイスを使用する
Firebase Test Lab プラグインを介して Gradle で管理されているデバイスを使用することで、プロジェクトの Gradle ファイルの構成に基づいて、Test Lab デバイスで自動インストルメンテーション テストを大規模に実行できます。
Gradle で管理されているデバイスでは、スマート シャーディングも利用できるため、過去のテスト履歴に基づいてシャード間でテストを最適に分散できます。スマート シャーディングでは、シャードはほぼ同じ時間実行され、できるだけ早くテスト結果が返されます。スマート シャーディングは、大規模なテストスイートを並行して実行できるため、この機能は CI/CD フローに適しています。
Gradle で管理されているデバイス用の Test Lab プラグインを使用してスマート シャーディングを有効にするには、スマート シャーディングを使用してテスト実行を最適化するの方法をご覧ください。