2015/12/15

Android: AppiumでUI Testing

本稿は下記を参考にしています.

Appiumは各ベンダ(Google, Apple)がリリースしているUI Testing Frameworkをラップした統一APIを提供してUIテストを可能にするもの.
これにより, iOSのテストケースをAndroidでも流用できるといったアドバンテージがある
(UI構成が違えばテストケースの流用は難しい)

AppiumがラップするUI Testing Frameworkは下記.

  • iOS: Apple’s UIAutomation
  • Android 4.2+: Google’s UiAutomator
  • Android 2.3+: Google’s Instrumentation.

確認環境は下記.

  • Android 5.0
  • Appium 1.4.13

注意点

Appiumはプロダクトのバイナリ(.apk)があればテスト可能だが, テスト対象アプリで準備が必要な点がある.
Android4.4以降でWebViewをテストする場合はWebViewのデバッグオプションが, Android4.1以前で動作する場合はINTERNETパーミッションが必要になる.

WebView

Android4.4からWebViewはChromiumベースに変更された.
テスト対象アプリをKitKat以上 かつ WebViewをテスト対象に含む場合は下記を実施する必要がある.

// WebViewをテストする場合は下記をWebView使用前に実施しておくこと.
WebView.setWebContentsDebuggingEnabled(true);

参考:

- Remote Debugging on Android with Chrome
- Appium - AUTOMATING HYBRID ANDROID APPS

Apptium or Selendroid

Androidのバージョンによって動作するモードが異なる.

  • Android 4.2+: Google’s UiAutomator
  • Android 2.3+: Google’s Instrumentation. (Instrumentation support is provided by bundling a separate project, Selendroid)

これはAppiumが使用するライブラリのサポート範囲に依存している.
Selendroid modeで確認する場合, テスト対象のアプリにINTERNETパーミッションを宣言する必要がある.

<uses-permission android:name="android.permission.INTERNET" />

参考:

- Appium - ANDROID SUPPORT
- Appium - Notes

Launch Appium server

Appiumをダウンロードする.
今回はAppium 1.4.13を選択. ダウンロードしたらAppiumを起動.

参考: Appium GUI

Appium GUIで下記を実行してAppiumサーバを起動する.

  1. Android Setting(Droid icon) - App Path にテスト対象のapkのパスを入力
  2. Android Settingを閉じて Launch

TestCase

Appiumはテスト対象アプリの操作に特化したツールであるため, アサーションなどの機構は別で用意する必要がある(Productionコードは必要無い).
今回は別プロジェクト(module)を作成してJUnitでテストスクリプトを書いた.

テストコードに必要なライブラリは下記.

dependencies {
    // Appiumクライアントライブラリを利用するための宣言
    testCompile 'io.appium:java-client:2.1.0'
}

テストの実行結果はbuild/reports/testsに出力される.

補足: io.appium:java-client:は3.3.0がリリースされていたが, hamcrestなど依存ライブラリが変わっている様子. 今回は動作確認目的のため2.1.0で実施.

以上.