lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

Espresso テスト レコーダーでの UI テスト作成

Espresso テスト レコーダー ツールを使うと、テスト用のコードを一切書くことなくアプリの UI テストを作成できます。テストシナリオの登録では、端末を使ってインタラクションを記録し、アプリの特定のスナップショットの UI 要素を確認するアサーションを追加します。その後、Espresso テスト レコーダーは保存された記録を読み出して、対応する UI テストを自動的に生成します。これを実行して、アプリをテストできます。

Espresso テスト レコーダーは、Espresso テスト フレームワーク、すなわち Android Testing Support Library に含まれる API をベースにテストを作成します。この Espresso API によって、ユーザーのアクションに基づく正確で信頼性の高い UI テストを作成できます。この仕組みではアプリの既存の activity やビューに直接アクセスすることなく、期待動作、操作、アサーションを指定するため、テストの不安定性が排除されテストの実行速度が向上します。

テスト端末でアニメーションをオフにする

Espresso テスト レコーダーを使用する前にテスト端末でアニメーションをオフにして、予期しない動作が発生するのを防ぎます。手順については単一アプリの UI テストのページにある「Espresso の設定」のセクションの説明をご覧ください。ただし Espresso ライブラリに手動で依存関係のリファレンスを設定する必要はありません。記録を保存すると、テスト レコーダーによって自動で設定が行われます。なお、この設定は 1 つのプロジェクトにつき 1 回だけ必要です。

Espresso テストの記録

Espresso テストは UI インタラクションとビュー要素に対するアサーションの 2 つの基本コンポーネントから構成されます。UI インタラクションには、アプリを操作するためのタップとタイプ アクションが含まれます。アサーションは画面上の視覚要素コンテンツの存在を確認するためのものです。たとえばメモ テストアプリの Espresso テストの場合、UI インタラクションにはボタンのクリックやメモの作成などの操作が含まれ、アサーションでボタンやメモの内容の存在を確認することが想定されます。

本セクションでは Espresso テスト レコーダーを使用して、この 2 つのテスト コンポーネントを作成し、記録したものを保存してテストを生成する方法について説明します。

UI インタラクションの記録

Espresso テスト レコーダーの記録を開始する手順は次のとおりです。

  1. [Run ] > [ Record Espresso Test] をクリックします。
  2. [Select Deployment Target] ウィンドウで、テストの記録に使用する端末を選択します。必要に応じて Android Virtual Device を新規に作成します。[OK] をクリックします。
  3. Espresso テスト レコーダーがプロジェクトのビルドを開始します。なお、アプリの操作が許可される前に、対象のアプリをインストールして起動しておく必要があります。アプリを起動すると [Record Your Test] ウィンドウが表示されますが、まだ端末を操作していないので、メインパネルには「No events recorded yet.」と表示されます。端末を操作すると、「Tap」アクションや「Type」アクションなどのイベントのロギングが始まります。

注: インタラクションのロギングが開始可能になる前に、端末のダイアログに「Waiting for Debugger」「Attaching Debugger」などと表示される場合があります。Espresso テスト レコーダーは UI イベントのロギングにデバッガを使用します。デバッガがアタッチされるとダイアログは自動で消えるため、[Force Close] をタップしないでください。

記録されたインタラクションは、以下の図 1 のように [Record Your Test] ウィンドウのメインパネルに表示されます。Espresso テストを実行すると、これらのアクションは同じ順番で実行されます。

図 1. 記録済みの UI インタラクションが表示された [Record Your Test] ウィンドウ

アサーションを追加して UI 要素を確認する

アサーションは、次の 3 つのタイプによってビュー要素の存在またはコンテンツを確認します。

  • text is:選択したビュー要素のテキスト コンテンツを確認します。
  • exists:画面に表示されている現在のビュー階層にビュー要素が存在していることを確認します。
  • does not exist:現在のビュー階層にビュー要素が存在していないことを確認します。

テストにアサーションを追加する手順は次のとおりです。

  1. [Add Assertion] をクリックします。Espresso で UI 階層と現在のアプリ状態に関するその他の情報を取得する間、[Screen Capture ] ダイアログが表示されます。Espresso がスクリーンショットを撮影すると、このダイアログは自動的に消えます。
  2. [Record Your Test] ウィンドウの右側のパネルに現在の画面レイアウトが表示されます。アサーションを作成するビュー要素を選択するには、スクリーンショット上でその要素をクリックするか、ウィンドウの下部にある [Edit assertion] ボックス内の 1 番目のプルダウン メニューを使用します。選択されたビュー オブジェクトは赤いボックスで強調表示されます。
  3. 使用したいアサーションを [Edit assertion] ボックス内の 2 番目のプルダウン メニューから選択します。選択されたビュー要素に対して有効なアサーションが、Espresso によってメニューに入力されます。
    • "text is" アサーションを選択すると、Espresso は現在選択中のビュー要素内に自動でテキストを挿入します。期待するアサーションに合うようにテキストを編集するには、[Edit assertion] ボックス内の 3 番目のテキスト フィールドを使用します。
  4. [Save and Add Another] をクリックして別のアサーションを作成するか、[Save Assertion] を選択してアサーション パネルを閉じます。

図 2 のスクリーンショットは、メモのタイトルが "Happy Testing!" であることを確認するために作成した "text is" アサーションを示しています。

図 2. ビュー要素を選択後(赤の部分)の [Edit assertion] ボックス

アサーション作成中は [Record Your Test] ウィンドウにアサーション パネルが開いた状態になりますが、引き続きアプリを操作できます。Espresso テスト レコーダーはアクションのロギングを継続しますが、編集中のアサーションはいったん保存されると、それらのインタラクションの前に表示されます。また、アサーションのスクリーンショットには、[Add Assertion] ボタンが押された瞬間の端末またはエミュレータのレイアウトが保持されます。

記録を保存する

アプリの操作を終えてアサーションを追加したら、次の手順で記録を保存して Espresso テストを生成します。

  1. [Complete Recording] をクリックして、[Pick a test class name for your test] ウィンドウを表示します。
  2. Espresso テスト レコーダーは起動された activity 名に基づいて、そのパッケージ内で固有の名前をテストアプリにつけます。提示された名前を変更するには、[Test class name] テキスト フィールドで編集して [Save] をクリックします。
    • Espresso 依存関係をアプリに追加しなかった場合は、テストの保存時に [Missing Espresso dependencies] ダイアログが表示されます。[Yes] をクリックすると、依存関係が build.gradle ファイルに自動で追加されます。
  3. Espresso テスト レコーダーがファイルを生成したあと、そのファイルは自動で開き、Android Studio の [Project] ウィンドウにテストクラスが選択された状態で表示されます。
    • テストの保存場所は、インストルメンテーション テストのルートの場所と起動された activity のパッケージ名に依存します。たとえばメモ テストアプリの保存場所は、src > androidTest > java > com.example.username.appname フォルダ(テストを記録したアプリ モジュールのフォルダ)になります。

ローカルで Espresso テストを実行する

Espresso テストは、Android Studio IDE の左側にある [Project] ウィンドウで実行します。

  1. 対象のアプリ モジュールのフォルダを開いて、実行したいテストがある場所に移動します。テストの場所は、インストルメンテーション テストのルートの場所と起動された activity のパッケージ名に依存します。次の例は、メモ テストアプリ用のテストの保存場所を示しています。
    • ウィンドウ内で Android ビューを表示している場合は、java > com.example.username.appname (androidTest) に移動します。
    • ウィンドウ内で Project ビューを表示している場合は、そのモジュール フォルダ内の src > androidTest > java > com.example.username.appname に移動します。
  2. テスト上で右クリックして [Run ‘testName’] をクリックします。
    • またはテスト ファイルを開いて、生成されたテストクラスまたはメソッド上で右クリックします。テストの詳しい実行方法については、アプリのテストのページをご覧ください。
  3. [Select Deployment Target] ウィンドウで、テストの実行に使用する端末を選択します。必要に応じて Android Virtual Device を新規に作成します。[OK] をクリックします。

IDE の下部の [Run] ウィンドウでテストの進捗を確認します。Android Studio でプロジェクトのフルビルドが実施され、図 3 のように [Run] ウィンドウにテスト名が表示されたタブが開きます。このタブでテストの合否と所要時間を確認できます。テストが完了すると、このタブに「Tests ran to completion.」と表示されます。

図 3. ローカルで Espresso テストを実行したあとの [Run] ウィンドウの出力例

テストの実行構成の作成については、実行 / デバッグ構成の新規作成 の「クラスまたはメソッドのテスト構成を定義する」のセクションで詳細をご覧ください。

Firebase Test Lab for Android で Espresso テストを実行する

Espresso テスト レコーダーで生成したテストを Firebase Test Lab で実行すると、クラウド内で何百もの端末構成に対してアプリをテストできます。Spark プランの 1 日の無料割り当ての範囲内であれば、Test Lab で無料でアプリのテストが可能です。Firebase Test Lab を使用して Espresso テストを実行するには、アプリ用の Firebase プロジェクトを作成して、Firebase Test Lab を使ってテストを実行するの手順どおりに Android Studio で操作します。

図 4. Firebase Test Lab の複数の端末でテストを実行したあとの [Run] ウィンドウの出力例