[Android] uiautomator

スポンサーリンク

uiautomator というのがあると聞いて.

Ubuntu 13.10 (64bit)
Android SDK r22.3
Nexus 7 (2012) + Android 4.4.2

developer.android.com の情報

uiautomator
http://developer.android.com/tools/help/uiautomator/index.html

UI Testing
http://developer.android.com/tools/testing/testing_ui.html

概要

Android SDK は,アプリの自動 UI テストをサポートすべく,下記のツールを提供しているようです.

uiautomatorviewer

Android アプリの UI 部品をスキャンして解析する GUI ツールです.

uiautomator

お望みの UI テストを作成するための API 群,それを自動実行するエンジンを含む Java ライブラリです.

制約

この 2 つのツールを使用するためには,Android 開発ツールにおいて下記の制約があります.

Android SDK Tools, Revision 21 or higher
Android SDK Platform, API 16 or higher

作業の流れ

自動 UI テストに必要なステップ

  1. テストする端末にアプリをインストールし,アプリの UI 部品を解析します.自動テストのフレームワークがアプリの UI 部品にアクセスできることを確認します.UI 部品の解析は,uiautomatorviewer を実行することで行います.
  2. 特定のユーザ操作を想定した自動テストのコードを作成します.uiautomator ライブラリが必要になります.
  3. 作成コードをコンパイルして JAR ファイルにします.そして,それをテストする端末にインストールします.
  4. テストを実行し,結果を確認します.
  5. バグを見つけたり,バグが修正されているかを確認します.

アプリの UI 解析

  1. Android 端末を開発用 PC に接続します.
  2. ターミナルで,Android SDK のディレクトリの下の tools ディレクトリに移動します.(PATH の設定をしている場合は必要ありません)
  3. uiautomatorviewer を実行します.
  4. テストしたいアプリを起動し,uiautomatorviewer の Device Screenshot ボタンをクリックします.
  5. ツールの画面左側にアプリのスクリーンショット,ツールの画面右側には UI 部品が階層式に表示されるので,その内容を確認します.
    1. テストの準備

      端末でアプリを実行できるように

      adb 等を使用し,テストしたいアプリ (APK) を端末にインストールします.

      アプリの UI 部品を識別できるように

      テストしたいアプリの UI 部品を識別できるようにします.UI 部品は,可視的なテキストラベル,あるいは
      android:contentDescription http://developer.android.com/reference/android/view/View.html#attr_android:contentDescription,またはその両方を持つべきでしょう.uiautomatorviewer を使用することで簡便にアプリ上の可視的なオブジェクトを調べることができます.

      アプリケーションがアクセス可能なことを保証するために

      uiautomator のために最低限の最適化を行っておくべきでしょう.

      • ImageButton,ImageView,CheckBox,その他 UI にラベルするために android:contentDescription を使用します.
      • EditText には contentDescription の代わりに android:hint を使います.
      • グラフィカルアイコンに android:hint を関連付けます.
      • トラックボールや D-pad のようなコントローラで UI 要素にアクセスできることを確認します.
      • テストフレームワークから UI 部品にアクセスできることを uiautomatorviewe を使用して確認します.

      テストコードを作成する開発環境のために

      Eclipse で Java Project を作成します.

      Project Explorer でプロジェクトを右クリックし,Properties – Java Build Path を選択します.Add Library で JUnit3 を選択します.Add External JARs で Android SDK のディレクトリ下の platforms/android-xx の uiautomator.jar と android.jar を選択します.

      uiautomator を使用したテストの作成

      uiautomator を使用するテストクラスは,UiAutomatorTestCase を extend します.UiAutomatorTestCase は junit.framework.TestCase を extend しているので JUnit の Assert クラスを使用することができます.

      uiautomator API

      UiDevice

      UiDevice  |  Android Developers

      端末の状態 (現在の向き,画面サイズ等) を確認したり,端末レベルのアクション (回転させたり,ホームボタンやメニューボタンを押したり等) を行うことができます.

      UiDevice のインスタンスは,getUiDevice() で取得できます.

      UiSelector

      UiSelector  |  Android Developers

      特定の UI 要素を探す基準を表します.マッチする要素が 1 を超える場合,レイアウトの階層で最初にマッチした要素が返されます.マッチする要素が無い場合は UiAutomatorObjectNotFoundException が投げられます.childSelector() を使用して複数の UiSelector をネストすることもできます.

      UiObject

      UiObject  |  Android Developers

      UI 要素を表します.UiObject インスタンスを作成するためには,UI 要素を探して選択する方法を記述するための UiSelector を使用します.

      UiCollection

      http://developer.android.com/tools/help/uiautomator/UiCollection.html

      アイテムのコレクションを表します.例えば,ミュージックアルバム内の曲や受信ボックスの中のメール一覧等です.UiObject と同様に,UiSelector を設定することで UiCollection のコンストラクタを作成します.UiCollection のための UiSelector は,他の子 UI 要素 (子 UI 要素を含むレイアウトビューのような) のコンテナ,あるいはラッパーである UI 要素を探すべきです.

      UiScrollable

      UiScrollable  |  Android Developers

      UiCollection は,スクロール可能なレイアウト要素におけるアイテムの検索をサポートしますが,このクラスは,縦方向,横方向のスクロール操作に使用することができます.

      サンプルテストコード

      http://developer.android.com/tools/testing/testing_ui.html に掲載されているものを参考にします.

      uiautomator のビルドとデプロイ

      Android SDK のディレクトリの tools/android にパスが通っているとします.また,Java プロジェクトのパスを /path/to/workspace/project_test とします.

      ターミナルでプロジェクトのディレクトリに移動し,下記のコマンドを実行します.

      cd /path/to/workspace/project_test
      android create uitest-project -n project_test -t 1 -p .
      

      コマンドのフォーマットは下記の通りです.

      <android-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path>
      

      nama は,uiautomator のテストコードを含んでいるプロジェクト名です.path は,そのプロジェクトのディレクトリのパスです.

      コマンド実行後,同じ階層に build.xml が生成されます.

      ant を使用してビルドします.

      ant build
      

      BUILD SUCCESSFUL と表示されることを確認します.

      プロジェクトの bin ディレクトリの下に プロジェクト名.jar (今回の例では project_test.jar) が生成されていることを確認します.

      生成された JAR を Android 端末に転送します.

      adb push ./bin/project_test.jar /data/local/tmp/
      

      uiautomator テストの実行

      uiautomator のテストコードが記述されたクラスのパッケージ名を test.example.project_test,そのクラス名を MyTest とした場合,下記のように adb shell で実行します.

      adb shell uiautomator runtest project_test.jar -c test.example.project_test.MyTest
      

      ベストプラクティス

      アプリが実行される可能性のある様々なタイプのデバイスで,アプリ上の同じ UI 機能を確認しませう.

      電話の着信,ネットワークの中断,ユーザによる他のアプリへの切り替えのような一般的なシナリオを照らし合わせてテストしませう.

Android
スポンサーリンク
コピペワールド