折角、Android - UI AutomatorとAWS - Device Farmを調査したので、AWS - Device FarmでAndroid - UI Automatorによる試験を実施してみようかと思い、試してみました。
手順としては、以下のようになります。
  1. 試験対象となるAPK(Apk1)を用意
  2. UI Automatorが実装されている試験APK(Apk2とApk3)を用意
  3. UI Automatorは試験実行時に以下の場所にAPKが2つ作成されます。
    ※ "Build APK"では以下の"Apk2"しか作成されないので、注意が必要です。

    APK格納フォルダ: [モジュール名称]/build/outputs/apk
    No.APK名称用途
    Apk2[モジュール名称]-[Build Variant].apkモジュール用のAPK
    Apk3[モジュール名称]-[Build Variant]-androidTest.apkAndroid Test向けのAPK
    例: モジュール名称が"app"、Build Variantが"debug"の場合
    APK格納フォルダ: app/build/outputs/apk
    app-debug.apk
    app-debug-androidTest.apk

    UI Automatorでは試験対象のアプリが3rd Party製の場合もあります。その場合、以下の3つのAPKが必要になります。
    No.APK名称
    1試験対象アプリ向けのAPK(Apk1)No.1とNo.2は内製アプリにおいては一緒になることがあります
    2試験コードを実装したモジュール向けのAPK(上表のApk2)No.1とNo.2は内製アプリにおいては一緒になることがあります
    3試験コードを実装されたAPK(上表のApk3)-
    この場合はAndroid Test向けのAPK(Apk3)とは別に一緒に作成されたモジュール用のAPK(Apk2)もインストールしておく必要があります。
    インストールされていないと、以下のようなエラーが発生して、自動試験が失敗します。
    android.util.AndroidException: INSTRUMENTATION_FAILED: jp.eq_inc.testuiautomator.test/android.support.test.runner.AndroidJUnitRunner
     at com.android.commands.am.Am.runInstrument(Am.java:890)
     at com.android.commands.am.Am.onRun(Am.java:400)
     at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
     at com.android.commands.am.Am.main(Am.java:121)
     at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
     at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262)
    INSTRUMENTATION_STATUS: id=ActivityManagerService
    INSTRUMENTATION_STATUS: Error=Unable to find instrumentation target package: jp.eq_inc.testuiautomator
    INSTRUMENTATION_STATUS_CODE: -1
    
  4. AWS - Device Farmの"Automated tests"に試験を登録
  5. 手順自体は大筋、こちらに沿ってください。
    ただし、以下の点を変更しています。
    概要画面イメージ
    "Choose your application"で登録するAPKは、試験対象となるアプリ向けのAPK(Apk1)
    "Configure a test"で"Instrumentation"を選択し、試験コードを実装したAPK(Apk3)を登録(※)
    "Specify device state"でさらに追加するアプリとして、試験コードを実装したモジュール向けのAPK(Apk2)を"Install other apps"より登録
    ※ "UI Automator"を選択すると試験実施時に失敗しました。調べてみると、このUI Automatorは"UI Automator 1.0"向けのようで、現状の"UI Automator 2.0"では"Instrumentation"を選択するので問題ないようです。参考サイト

このようなことを実施すると、Device Farm上でUI Automatorを使った試験ができました。ただ、よほどのことがない限りDevice Farm上で実施することはなさそうですが・・・。

コメントの投稿