3月13日、以下の通りAndroidのUIAutomator 2.0がリリースされていたのですね。
uiautomatorは、AndroidのAccessibility機能やその拡張を介して、インストールされた様々なapkを操作するフレームワークでした。そのため、例えばリリース用apkに対してシナリオテストを自動化するときなんかに使います。例えば、AppiumはAndroidに対してはこのuiautomator1.0を利用してテストを実施することをしています。
uiautomatorあらため、UI Automator 2.0の新しいところは、Instruments経由でUiElementsなどを使えるようになったことらしいです。これにより、./gradlew connectedCheck なんかのコマンドでUI Automatorによるテストを実施できるようになったとか。
まだASOPには公開されていませんが、Appiumのメンバらも公開されたら良さそうなら統合とかするでしょうし、DroidDriverとももしかすると競合するところがあるのかもしれません。
2014年12月のEspresso2.0のリリースとそれに伴うJUnit4の提供、UI Automatorの更新と、比較的テストツールの充実が図られていて良い感じですね。
Testing Support Libraryが提供する大きな機能
- AndroidJUnitRunner: JUnit 4-compatible test runner for Android
- Espresso: UI testing framework; suitable for functional UI testing within an app
- UI Automator: UI testing framework; suitable for cross-app functional UI testing across system and installed apps
AndroidJUnitRunner
Require Android2.2(API Level8) or higher
JUnit4のサポート、@ReureiesDevice、@SdkSupress、@SmallTestなどのアノテーション、instrumentsの並列実行などを提供しています。
Espresso
Requires Android 2.2 (API level 8) or higher.
- Flexible APIs for view and adapter matching in target apps. For more information, see View matching.
- An extensive set of action APIs to automate UI interactions. For more information, see Action APIs.
- UI thread synchronization to improve test reliability. For more information, see UI thread synchronization.
Espressoは、アプリ単体のテストをサポート。
UI Automator
Requires Android 4.3 (API level 18) or higher.
- A viewer to inspect layout hierarchy. For more information, see UI Automator Viewer.
- An API to retrieve state information and perform operations on the target device. For more information, see Access to device state.
- APIs that support cross-app UI testing. For more information, see UI Automator APIs .
UI Automatorは、複数のアプリをまたいだテストまで実施可能。
例えば、複数アプリで連携して何かする、という動作を自動化するにはEspressoではなくUI Automatorを使う必要があります。私は、Appiumを使って同様のテストを構築していますが、UI Automator 2.0を使うことでInstruments越しにそれができるようになるのですね。
あと、APIを眺めるとわかるのですが、UI Automatorはフルで機能を使おうとするとAPI Level 18以上が必要になります。そのため、当面はuiautomator1.0や、Appiumなどによりこの機能は代替されそう。
UiObjectやUiScrollable、UiDeviceとかとか、uiautomatorの頃のものがそのまま持ってこられているので、既存のuiautomatorとのIFは保持されてそうな印象。
iOSはUIAutomationとInstruments、AndroidはUIAutomatorとInstrumentationと、大文字の使い方も似てきてややこしさをまた増してきました。が、モバイル界隈もOSの成長とともにそのテストツールの成長にも手が伸びてきた印象があって、面白くなりそうですね。