Robo スクリプトの実行(Android)

このドキュメントでは、モバイルアプリの手動 QA タスクを自動化し、継続的インテグレーション(CI)とリリース前テスト戦略を可能にするテストである Robo スクリプトの使用方法について説明します。たとえば、Robo スクリプトを使用して、一般的なユーザー行動のテスト、ユーザー名やパスワードなどの特定のユーザー インターフェース(UI)の入力などができます。Robo スクリプトは Robo テストの機能です。

Robo スクリプトを使用すると、アプリ内のワークフローの操作手順を記録し、記録した内容を Firebase コンソールにアップロードして、Robo テスト内で実行できます。スクリプトを添付した状態で Robo テストを実行すると、Robo はまずスクリプトに記述されたアクションを実行してから、通常どおりアプリを調べます。

Robo スクリプトは、テストエンジンとして Robo テストを使用します。最も基本的な形式では、Robo スクリプトは「username」というテキストを入力してから [OK] ボタンをタップするなどの一連の UI アクションで構成されます。Robo スクリプトには、要素が表示されるのを待つ、要素内の特定のポイントをタップする、Android Debug Bridge(adb)シェルのコマンドを実行するなどのアクションを含めることもできます。

Robo スクリプトには、従来のテスト フレームワークに比べて次のようなメリットがあります。

能力 説明
非常に堅牢 Robo スクリプトを使用すると、各アプリ バージョン間の構造、動作の大きな差異、およびアプリの不安定性を許容できます。
オープンエンド Robo スクリプトが完了すると、基本 Robo テストが引き継いでアプリのテストを続けることができます。この継続的なテスト アプローチにより、いくつかの主要なユースケースが可能になります。たとえば、Robo スクリプトを使用してカスタム ログインフローを実行し、アプリを特定の状態にすることができます。
記録可能 Robo スクリプトを手動でコーディングする必要はありません。Android Studio の Robo スクリプト レコーダーを使用して記録できます。Robo スクリプトの作成と変更には通常、モバイル開発の知識は必要ありません。
フレキシブル Robo スクリプトは、ゲームで一般的な非ネイティブ UI 要素とやり取りできます。

Robo スクリプトは、Robo テスト中に条件付きでトリガーされるため、ユーザーは Robo の動作を拡張できます。通常は、カバレッジを拡大したり、特定の機能をターゲットにしたりするのに役立ちます。従来のテスト フレームワークとは対照的に、Robo スクリプトでは以下がサポートされています。

  • さまざまなトリガー条件(例: 特定のアプリのパッケージ名がアクティブになっているかどうか、画面に特定の要素が表示されているかどうか)。
  • 実行制御(例: 最大実行回数、優先度、クロール ステージ)。
  • 一般的でないアクションのタイプ(条件付き、要素の無視、画面を閉じる)。

簡単にメンテナンスできるため、可能な限り Robo スクリプトを使用することをおすすめします。たとえば、Robo スクリプトを使用して次を実行できます。

  • 重要なワークフローをナビゲートして、アプリの機能の中核に到達します。たとえば、ログイン、初回起動後のアプリの状態の設定、新しいユーザーの登録を行うことができます。
  • アプリの特定の部分に Robo を集中させることで、Robo テストの時間を最大限に活用できます。Robo スクリプトは、Robo テストがアプリの関連する部分に到達するようガイドします。ここで、Robo テストは完全に自動化されたクロールを再開します。
  • アプリを特定の状態または画面にして分析を行います。たとえば、アプリ内メッセージ、プライバシー ポリシー、ゲームの特定のレベルなどを分析します。
  • Robo スクリプトの完了後、Robo テストが完全に自動化されたクロールを再開するかどうかにかかわらず、エンドツーエンドのインストルメンテーション テストを実行します。

Robo スクリプトの高度な機能を使用すれば、次のことを行えます。

  • Robo がテスト対象アプリのクロールを開始する前に、またはクロール終了後にアクションを実行します。たとえば、クロール前にテスト対象アプリのデータをクリーンアップしたり、デバイス設定を変更したりできます。
  • クロール中の Robo の動作を変更します。具体的には、次のようなことを行えます。
    • 一部の UI ウィジェットまたはアプリ画面を無視するように Robo に指示します。
    • 特定の画面からバックトラッキングを行う際に実行する Robo のカスタム アクションを指定します。
    • クロール中に特定のアプリ画面が検出されたときに、特定のアクションを実行するように指定します。
  • Robo によるクロールの実行方法を完全にカスタマイズします。たとえば、条件付きアクションと無条件アクションを組み合わせて使用して、デバイスを操作して途中で表示されるポップアップ ダイアログを閉じたりしながら、クロール全体を通じてテスト対象アプリをバックグラウンドでテストします。

Robo スクリプトは、あらゆる種類のテストに代わるものではないことにご注意ください。アプリの低レベルのロジックのバグを検出するには、引き続き単体テストが必要です。通常、これらのテストに Android 環境や iOS 環境は必要ありません。対象を決めたインストルメンテーション テストで Robo スクリプトのテストを補完することをおすすめします。このテストは、ビジネス ロジックに関する具体的で詳細なアサーションを行うことができ、コードで最もよく表現されます。

Android Studio で Test Lab を使用して Robo スクリプトを記録する

Android Studio の Robo スクリプト レコーダーを使用すると、デバイス上のアプリを直接操作して Robo スクリプトを記録できます。Android Studio の Firebase ツールを使って Robo スクリプトを開始するには、次の手順を行います。

  1. Android Studio を開き、[ツール] -> [Firebase] を選択します。

  2. Firebase ペインで、[Record Robo Script and Use it to Guide Robo Test] をクリックします。

  3. [Record Robo script] をクリックします。[Select Deployment Target] ダイアログが表示されます。

  4. Robo スクリプトを記録するデバイスを選択します。

  5. デバイスに Robo スクリプトを記録したら、このファイルを任意の場所に JSON ファイルとして保存します。

  6. Firebase コンソールで Test Lab ページを開き、JSON スクリプト ファイルとアプリ APK をアップロードします。

  7. [続行] ボタンをクリックします。デバイスと API レベルを選択するように求められます。テスト スクリプトが完了すると、Test Lab がテストレポートを生成します。

  8. (省略可)テストレポートと動画の logcat をコピーまたはダウンロードするには、[ソースファイルを表示] をクリックします。

デフォルトでは、Robo スクリプトの堅牢性メカニズムにより早期に失敗するのを防ぎます。strict 実行モードを選択して Robo スクリプトがいずれかの時点で失敗した場合、Test Lab はスクリプト内の以降のステップをすべて中止し、通常の Robo クロールを再開します。Robo スクリプトが失敗するのは、ほとんどの場合、Robo が必要な要素をスクリーン上に見つけられないことが原因です。失敗を回避するには、アプリのナビゲーションが予測可能であり、スクリーンの表示順序が決定的であることを確認してください。

Test Lab で Robo スクリプトを実行する

Test Lab で Robo スクリプトを実行するには次の手順に従います。

  1. Firebase コンソールで Test Lab ページを開きます。

  2. アプリの APK または AAB を [App APK] または [AAB] フィールドにアップロードします。

  3. 記録または手動で作成した Robo スクリプト ファイルを [Robo スクリプト(オプション)] フィールドにアップロードします。

ローカル Robo テスト実行への Robo スクリプトの提供

ローカルの Robo テスト実行に Robo スクリプトを提供するには、次の Robo テスト オプションを使用します。

--robo-script-file <robo-script-path>

<robo-script-path> を、ローカル ファイル システム内の Robo スクリプト ファイルへのパスに置き換えます。ローカル Robo テスト実行の手順に従います。

gcloud CLI テスト呼び出しで Robo スクリプトを指定する

gcloud CLI テスト呼び出しで Robo スクリプトを指定するには、次の gcloud CLI フラグを使用します。

--robo-script = <robo-script-path>

<robo-script-path> を、ローカル ファイル システムまたは Cloud Storage 内の gs:// 表記を使用した Robo スクリプト ファイルへのパスに置き換えます。次に例を示します。

gcloud firebase test android run --app = <path_to_app_apk_file> --robo-script = <robo-script-path>

次のステップ