新サービス「AWS Device Farm」を使って Android アプリをテストしてみた!

Device Farm
159件のシェア(すこし話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Device Farm

本日、AWS の新サービス「AWS Device Farm」(以下 Device Farm) がリリースされました。Device Farm はモバイルアプリのテストをクラウドで行うサービスです。現時点では Android と Fire OS が対応しており、既存のテストケースを実施したり、モンキーテストを実施したりすることができます。Android または Fire OS 上で動くアプリであればテストできるので、PhoneGap や Titanium、Xamarin、Unity といったフレームワークを使ったアプリもテスト可能です。

device-farm00

ということで、早速触ってみました!

使用できるテスティングフレームワーク

以下のテスティングフレームワークを使ってテストを実行できます。

  • Built-in: Fuzz
  • Appium Java JUnit
  • Appium Java TestNG
  • Calabash
  • Instrumentation
  • uiautomator

テスト対象の Android アプリの作成

まずはテスト対象の Android アプリを用意しましょう。今回は Android Studio で作った、単純な Android アプリプロジェクトを使います。なお、Device Farm ではテストケースを記述しなくてもテストが可能なので、今回は特に用意していません。

プロジェクトの作成

それでは Device Farm を使ってみましょう。Device Farm は現在、オレゴンリージョンのみで使用可能です。まずは「Getting Started」をクリック。

device-farm01

Project name に適当な名前を付けます。

device-farm02

5つのステップを順番に進めていきます。まずは Android アプリの APK をアップロードします。Android Studio でビルドしたことがあると app/build/app-debug.apk が生成されていると思うので、これをアップロードします。

device-farm04

OKです。「Next step」へ。

device-farm05

テストの設定が表示されます。今回は Built-in: Fuzz を使います。これは Device Farm がデフォルトで用意してくれているつまりテストケースを用意していなくてもテストできます。ランダムにアプリを動かしてくれます。モンキーテストですね。

device-farm06

以下の項目を設定します。

設定値 説明
Event count 実行するイベント数
Event throttle 1イベントの待機時間(ミリ秒)
Randomizer seed イベントのシーケンス番号(以前と同じイベントを実施する場合に使用)

次はテストを動かすデバイスです。Galaxy が豊富ですね。

device-farm07

次は、デバイス上の細かい設定です。データを突っ込んだり、他のアプリをインストールしたりできます。また、Wi-Fi や Bluetooth、GPS や NFC といった各機能の有効・無効が設定できます。設定が終わったら「Review and start run」をクリックします。

device-farm08

設定をもろもろ最終確認します。問題がなければ「Confirm and start run」をクリックします。

device-farm09

これでテストが実施されます。表示されているのは Run resuls 画面というもので、ここで実施したテストの進捗や結果が確認できます。

device-farm10

先ほど実施したテストを見てみましょう。おぉ…なんかごにょごにょやってますね…

device-farm11

終わりました!オールグリーンで気持ちが良いですね。

device-farm12

テスト結果の確認

それでは、テスト結果を確認してみましょう。今回は5つのデバイスで動かしてみました。Samsung Galaxy S5 (AT&T) を選びます。

まず表示されるのが Details タブです。こちらでは、Device Farm がテストを実施したログが見れます。

device-farm13

Screen shot タブでは、撮影したスクリーンショットがダウンロードできます。今回は特に書き出されませんでした。

device-farm15

Performance タブでは、CPU 使用率、メモリ使用量、スレッド数がグラフで確認できます。

device-farm14

Files タブでは、Logcat のログファイルやモンキーテストのログファイルがダウンロードできます。ログを出力していた場合に、こちらで確認できますね。

device-farm16

モンキーテストのログはこんな感じでした。一部抜粋。

:Monkey: seed=1437948621446 count=6000
:AllowPackage: sample.classmethod.jp.devicefarm
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
//   + Using main activity sample.classmethod.jp.devicefarm.MainActivity (from package sample.classmethod.jp.devicefarm)
// Selecting main activities from category android.intent.category.MONKEY
// Seeded: 1437948621446
// Event percentages:
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: 25.0%
//   6: 15.0%
//   7: 2.0%
//   8: 2.0%
//   9: 1.0%
//   10: 13.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=sample.classmethod.jp.devicefarm/.MainActivity;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=sample.classmethod.jp.devicefarm/.MainActivity } in package sample.classmethod.jp.devicefarm
Sleeping for 50 milliseconds
:Sending Touch (ACTION_DOWN): 0:(933.0,1227.0)
:Sending Touch (ACTION_UP): 0:(924.40643,1214.2377)
Sleeping for 50 milliseconds
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 50 milliseconds
:Sending Key (ACTION_DOWN): 82    // KEYCODE_MEN U
:Sending Key (ACTION_UP): 82    // KEYCODE_MENU
Sleeping for 50 milliseconds
:Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
Sleeping for 50 milliseconds
:Sending Key (ACTION_DOWN): 19    // KEYCODE_DPAD_UP
:Sending Key (ACTION_UP): 19    // KEYCODE_DPAD_UP
Sleeping for 50 milliseconds
:Sending Touch (ACTION_DOWN): 0:(28.0,1919.0)
:Sending Touch (ACTION_UP): 0:(23.40619,1916.9669)
Sleeping for 50 milliseconds
:Sending Touch (ACTION_DOWN): 0:(856.0,764.0)
:Sending Touch (ACTION_UP): 0:(859.559,755.3599)
Sleeping for 50 milliseconds
:Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
:Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
Sleeping for 50 milliseconds
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 50 milliseconds
:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
:Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER
Sleeping for 50 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(2.0,4.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(0.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(3.0,-5.0)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,-4.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(0.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-3.0,0.0)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-5.0,-4.0)

まとめ

すごく簡単に複数端末のテストが実施できました!モンキーテストが標準で使えるので、どんなアプリでもテストできそうなところが導入しやすいなぁと感じました。今回はモンキーテストしか行っていませんが、JUnit を使ったテストなども行えます。

Jenkins や CI サービスでテストすると、エミュレータがうまく動かなかったり、動いているのに ADB が認識しなかったりといった障害がありましたが、Device Farm がこれを解決してくれることを期待しています。

iOS 対応を待ち望んでいます!

参考