Firebase Test Lab を使用した Android 向けテストのスタートガイド

Firebase Test Lab を使用すると、さまざまなデバイスや構成でアプリをテストできます。このスタートガイドでは、実装手順と、Test Lab の Android 向けサービスの概要について説明します。

Test Lab の割り当てとお支払いプランの詳細については、使用量、割り当て、料金をご覧ください。

主なコンセプト

選択したデバイスと構成に対して、テストまたは一連のテストケースを実行すると、Test Lab はアプリに対してテストを一括して実行し、その結果をテスト マトリックスとして表示します。

デバイス × テスト実行 = テスト マトリックス

デバイス
スマートフォン、タブレット、ウェアラブル デバイスなど、テストを実行する実機または仮想デバイス(Android のみ)。テスト マトリックス内のデバイスは、デバイスモデル、OS のバージョン、画面の向き、ロケール(地域や言語の設定とも呼ばれます)で識別されます。
テスト、テスト実行
デバイス上で実行するテスト(または一連のテストケース)。テストは、デバイスごとに 1 つ実行するか、必要に応じてシャーディングし、そのテストケースを複数のデバイスで実行できます。
テスト マトリックス
テストの実行状況とテスト結果が含まれます。マトリックス内のいずれかのテスト実行が失敗すると、マトリックス全体が失敗となります。

ステップ 1: Test Lab にアップロードするテストを準備する

使用可能なテストタイプ

Test Lab では、次のテストを実行できます。すべてのテストタイプの実行時間は、実機では 45 分、仮想デバイスでは 60 分に制限されます。キャッチされない例外が発生すると、テストは失敗します。

  • インストルメンテーション テストまたは計測可能にされた単体テスト: Espresso または UI Automator フレームワークを使用して記述したテスト。このテストでは、AndroidJUnitRunnerAPI を使用して、アプリの状態に関する明示的なアサーションを作成することにより、正しい機能を確認できます。

  • Robo テスト: アプリの UI を分析してから、ユーザー アクティビティをシミュレートして体系的な調査を行う自動化されたテスト。コードを記述する必要はありません。詳細については、Robo テストの概要をご覧ください。

  • ゲームループ テスト: 「デモモード」を使用して、ゲームアプリでのプレーヤーの操作をシミュレートするテスト。複数のユーザーに対するゲームのパフォーマンスに問題がないことを確認できる、高速かつスケーラブルなテストです。ゲームループ テストの実行を選択すると、次のことを行えます。

    • ゲームエンジンにネイティブなテストを作成する

    • 異なる UI やテスト フレームワークに対する同じコードの記述を避ける

    • 必要に応じて、1 回のテスト実行で実行する複数のループを作成します(詳しくは、ゲームループ テストの概要をご覧ください)。また、ループはラベルを使用して整理できるため、状況を常に把握して特定のループを再実行することが可能です。

    Test Lab でこのテストを実行する手順については、ゲームループ テストの実行をご覧ください。

テストを実行するツール

テストの実行には、次に挙げるツールを選択できます。

  • 初めてのユーザーにおすすめ: Firebase コンソールは、アプリのアップロードや、ウェブブラウザからのテストの開始に使用できます。このツールを使用してテストを実行する手順については、Firebase コンソールを使用したテストをご覧ください。

  • Android Studio の統合を使用すると、開発環境を離れることなくアプリをテストできます。このツールを使用してテストを実行する手順については、Android Studio を使用したテストをご覧ください。

  • gcloud コマンドライン インターフェースでは、コマンドラインからインタラクティブにテストを実行できます。また、自動化されたビルドとテストプロセスの一部として、スクリプト作成にも適しています。このツールを使用したテストの実行手順については、gcloud CLI を使用したテストをご覧ください。

また、Alpha チャンネルまたは Beta チャンネルを使用し、Play ストアにアプリの APK ファイルをアップロードして公開する場合も、Test Lab を使用してアプリを無料でテストできます。詳細については、リリース前レポートを使って問題を特定するRobo テストをご覧ください。

ステップ 2: テストデバイスを選択する

Test Lab では、Google データセンターにインストールされ、動作している Android デバイスの複数のメーカーとモデルに対してテストを実行できます。デバイス上でのテストを Test Lab で行うことにより、Android Studio のエミュレータを使用したアプリのテストでは発生しないことがある不具合を検出できます。詳細については、使用可能なデバイスをご覧ください。

ステップ 3: テスト結果を確認する

テストを開始する方法にかかわらず、すべてのテスト結果は Test Lab で管理され、オンラインで表示できます。

テスト結果の概要は、自動的に保存され、Firebase コンソールに表示できます。これには、テストケース固有の動画、スクリーンショット、合格、不合格、不安定な結果のテスト数など、テストに最も関連のあるデータが含まれています。

未処理のテスト結果はテストログとアプリのエラーの詳細を含み、Google Cloud バケットに自動的に保存されます。バケットを指定する場合は、ストレージの費用が発生します。指定しない場合、バケットは Test Lab によって無料で作成されます。

詳細については、Firebase Test Lab の結果を分析するをご覧ください。

Android Studio からテストを開始した場合は、開発環境内でテスト結果を確認することもできます。

デバイスのクリーンアップ

Google ではアプリデータのセキュリティを重要視しています。業界標準のベスト プラクティスに従い、テストが終了するごとに、アプリデータを削除し、実機のシステム設定をリセットして、新しいテストを行う準備を整えます。カスタムのリカバリ イメージでフラッシュできるデバイスの場合は、テストを実行するたびにデバイスをフラッシュするためのステップを加えています。

Test Lab で仮想デバイスを使用する場合は、デバイスの使用後にそれらのインスタンスが削除されるため、どのテストでも新しい仮想デバイス インスタンスが使用されます。


Test Lab と Google Play 開発者サービス

通常、Test Lab デバイスは、Google Play 開発者サービス SDK の最新バージョンで実行されますが、一部のデバイスでは、SDK の新しいバージョンのリリース後、更新に数日かかる場合があります。一部のデバイスでは、互換性の問題が発生することもあります。

テストデバイスにプライベート バックエンド サーバーへのアクセスを許可する

一部のモバイルアプリは、テスト中に正常に動作するために、プライベート バックエンド サービスと通信する必要があります。バックエンド サーバーがファイアウォール ルールで保護されている場合は、以下の IP アドレス ブロックを使用して、ファイアウォールにルートを開くことで、Test Lab の実機と仮想デバイスのアクセスを許可できます。

モバイル広告

Test Lab はアプリのテストを自動化するスケーラブルなインフラストラクチャを提供していますが、この機能は不正な広告収益を生むように設計された悪意のあるアプリによって悪用される可能性があります。

この問題には次のように対処してください。

  • サードパーティのデジタル広告プロバイダ(広告ネットワーク、デマンドサイド プラットフォームなど)をご利用の場合は、アプリの開発とテスト時に、実際の広告ではなくテスト広告を使用することをおすすめします。

  • テストで実際の広告を使用する必要がある場合は、以下の IP アドレス ブロックを使用して、Test Lab から発生する収益と、対応するすべてのトラフィックを除外するように、ご利用のデジタル広告プロバイダに通知してください。Google が所有する広告プロバイダの場合は、Test Lab が対応するため、この通知を行う必要はありません。

Test Lab デバイスで使用される IP アドレス

Test Lab デバイスによって生成されるすべてのネットワーク トラフィックは、次の IP アドレス ブロックから発信されます。gcloud CLI で gcloud beta firebase test ip-blocks list コマンド を使用してこのリストにアクセスすることもできます。このリストは平均して年に 1 回更新されます。

プラットフォームとデバイスのタイプ CIDR IP アドレス ブロック
Android および iOS 搭載の実機、Arm 仮想デバイス

70.32.128.0/19(2022 年 2 月に追加)

108.177.6.0/23

108.177.18.192/26(2022 年 2 月に追加)

108.177.29.64/27(2022 年 2 月に拡張)

108.177.31.160/27(2022 年 2 月に追加)

199.36.156.8/29(2022 年 2 月に追加)

199.36.156.16/28(2022 年 2 月に追加)

209.85.131.0/27(2022 年 2 月に追加)

2001:4860:1008::/48(2022 年 2 月に追加)

2001:4860:1018::/48(2022 年 2 月に追加)

2001:4860:1019::/48(2022 年 2 月に追加)

2001:4860:1020::/48(2022 年 2 月に追加)

2001:4860:1022::/48(2022 年 2 月に追加)

Android Virtual Device(非 Arm)

34.68.194.64/29(2019 年 11 月に追加)

34.69.234.64/29(2019 年 11 月に追加)

34.73.34.72/29(2019 年 11 月に追加)

34.73.178.72/29(2019 年 11 月に追加)

34.74.10.72/29(2022 年 2 月に追加)

34.136.2.136/29(2022 年 2 月に追加)

34.136.50.136/29(2022 年 2 月に追加)

34.145.234.144/29(2022 年 2 月に追加)

35.192.160.56/29

35.196.166.80/29

35.196.169.240/29

35.203.128.0/28

35.234.176.160/28

35.243.2.0/27(2019 年 7 月に追加)

35.245.243.240/29(2022 年 2 月に追加)

199.192.115.0/30

199.192.115.8/30

199.192.115.16/29

現在は使用されていないデバイス IP ブロック

74.125.122.32/29(2022 年 2 月に削除)

216.239.44.24/29(2022 年 2 月に削除)