21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Firebase Test LabでのAndroidアプリのテストをCLIから実行する

Last updated at Posted at 2016-08-26

概要

Firebase Test Labはクラウドベースのアプリテスト基板で、その機能はgcloud command-line clientから利用可能です。したがって、gcloudコマンドを使用してFirebase Test Lab上でのAndroidアプリのテストの実行をスケジューリングできます。

公式にFirebase Test Labが公開される前、Cloud Test Lab時代からテストをCLIから実行するためのドキュメントはありましたが、正式にリリースされたので試して見ようと思います。

以下のドキュメントを参考に作業を進めます。

Firebaseプロジェクトの作成と課金

Firebaseのプロジェクトをまだ作成していないのであればFirebase consoleから作成します。「新規プロジェクトを作成」をクリックし、プロジェクト名と国を選択し、「プロジェクトを作成」をクリックします。

test_lab_1.png

メニューからTest Labを選択します。

test_lab_2.png

Test Labを利用するためには、「Blazeプラン」を選択する必要があるので選択します。

test_lab_3.png

課金処理が完了すると以下のような画面になり、これでFirebase Test Labを利用する準備ができました。

test_lab_4.png

Google Cloud SDKの実行環境の設定

Google Cloud SDKのインストール

Google Cloud SDKをインストールしていないのであれば以下のページからインストールします。これでgcloudコマンドを使用できるようになります。

gcloudコマンドでのSDKのアップデート

デフォルトでSDKに含まれているコマンドにTest Labのコマンドは含まれていないためgcloudコマンドを使用してbetaコンポーネントをアップデートする必要があります。

$ gcloud components update beta

プロジェクトIDのセット

gcloudにプロジェクトIDをセットします。

$ gcloud config set project <YOUR-PROJECT-ID>

プロジェクトIDはFirebase consoleから先ほど作成したプロジェクトを開き、プロジェクト名横の設定ボタンをクリックすることで確認できます。

test_lab_5.png

ログイン

gcloud authコマンドを利用してログインします。以下のコマンドを実行するとブラウザでGoogleアカウントを選択する画面が開くので、Blazeプランを課金したアカウントを選択しログインします。

$ gcloud auth login

以下のような文言が表示されればOKです。

test_lab_6.png

テストの実行

サンプルアプリ

サンプルアプリとしてドキュメントで紹介されているNotepad appを使用します。

テストを実行可能なAndroidデバイスのリストを取得

以下のコマンドを実行しデバイスリストを取得します。

$ gcloud beta test android devices list

コマンドを実行することで以下のようにデバイスのリストが表示されます。

test_lab_7.png

各カラムの意味は以下の通りです。

カラム名 意味 備考
DEVICE_ID テストを実行する端末を指定する際に使用
MAKE デバイスメーカー
MODEL_NAME モデル名
FORM デバイスの種類 エミュレータ or 実機であると思われる
RESOLUTION 解像度
OS_VERSION_IDS デバイスによってサポートされているOSのバージョン
TAGS DEVICE_IDを指定しないに場合にdefaultタグが指定してあるデバイスでテストを実行 betaについては現時点で不明

テストで利用可能なAndroid OSのバージョンリストを取得

以下のコマンドを実行しOSのバージョンリストを取得します。

$ gcloud beta test android versions list

コマンドを実行することで以下のようにデバイスリストが表示されます。

test_lab_8.png

最初の2つのカラムOS_VERSION_IDVERSIONで表示されている識別子は、テストを実行する際に使用できます。OSバージョンを明示的に指定しない場合、TAGSカラムのdefaultタグが指定してあるOSのバージョンがdefaultで使用されます。

テストで利用可能なロケールの取得

以下のコマンドを実行しロケールのリストを取得します。

$ gcloud beta test android locales list

最初のカラムLOCALEで表示されている識別子をテストを実行する際に使用できます。ロケールを指定しない場合defaultでenが使用されます。

test_lab_9.png

Roboテストの実行

Instrumentationテストを用意していないのであれば代わりにRoboテストを利用でき、UIのテストを自動的に実行可能です。Roboテストは、アプリのUIの静的解析を通してアプリをクロールすることでクラッシュや他の潜在的な問題を発見します。Google Play Developer Consoleのリリース前レポートではRoboテストが実行されています。

gcloudコマンドでは以下のようなコマンドを実行することでRoboテストを実行できます。

$ gcloud beta test android run \
  --type robo \
  --app app-debug.apk \
  --device-ids Nexus5 \
  --os-version-ids 21 \
  --locales ja_JP \
  --orientations portrait \
  --timeout 90s

--typeパラメーターが指定されていない場合--type roboが使用されます。その他のオプションについての詳細はgcloud help beta test android runで確認できます。また、指定するオプションはYAMLファイルで管理することができます。上記のオプションは以下のようにYAML形式で表現できます。

robo-test:
	type: robo
	app: app-debug.apk
	device-ids: Nexus5
	os-version-ids: 21
	locales: ja_JP
	orientations: portrait
	timeout: 90s

そして、以下の様にYAMLファイルをテスト実行時のオプションと指定することができます。これらについてのマニュアルはgcloud topic arg-filesを実行することで確認できます。

$ gcloud beta test android run test_settings.yml:robo-test

Instrumentationテストの実行

サンプルとして使用しているNotepadアプリは、Espressoによるテストが予め用意されています。typeオプションにinstrumentationを指定しInstrumentationテストを実行します。Instrumentationテストでは、app-debug-test.apkをテストに使用します。

app-debug-androidTest.apkassembleDebugTestを実行することでls app/build/outputs/apk以下に出力されます。

$ ./gradlew assembleDebugTest

Instrumentationテストの実行には、app-debug.apkも必要になるのでInstrumentationテストの実行を行う前に予めビルドしておきます。

$ ./gradlew assembleDebug assembleDebugTest

app-debug.apkapp-debug-androidTest.apkを用意し、Instrumentationテストを実行します。

$ gcloud beta test android run \
      --type instrumentation \
      --app app-debug.apk \
      --test app-debug-androidTest.apk \
      --device-ids Nexus5 \
      --os-version-ids 21 \
      --locales ja_JP \
      --orientations portrait

--testパラメーターが指定されいてる場合--type instrumentationパラメーターが使用されます。また、Roboテストと同様YAMLで指定するオプションを管理できます。

上記のコマンドで使用していないオプションについては、gcloud beta test android runをご覧ください。

テスト結果の確認

コマンドを実行するとFirebase Test Lab上でのテストがスケジューリングされ、CLI上に以下のように情報が表示されます。

$  gcloud beta test android run \
       --type instrumentation \
       --app app-debug.apk \
       --test app-debug-androidTest.apk \
       --device-ids Nexus5 \
       --os-version-ids 21 \
       --locales ja_JP \
       --orientations portrait

Have questions, feedback, or issues? Please let us know by using this Google Group:
  https://groups.google.com/forum/#!forum/google-cloud-test-lab-external

Uploading [app-debug-unaligned.apk] to the Cloud Test Lab...
Uploading [app-debug-test-unaligned.apk] to the Cloud Test Lab...
Raw results will be stored in your GCS bucket at [https://console.developers.google.com/storage/browser/test-lab-12345678910abcdfeg/]

Test [matrix-u5z3rglvh75t] has been created in the Google Cloud.
Cloud Test Lab will execute your instrumentation test on 1 device(s).
Creating individual test executions...done.

Test results will be streamed to [https://console.developers.google.com/project/test-project-1234/testlab/mobile/histories/bh.12345678910abcdfeg/executions/12345678910abcdfeg].
12:00:00 Test is Pending
12:00:01 Starting attempt 1
12:00:02 Test is Running
12:00:03 Installing APK: com.example.android.notepad
12:00:04 Installing APK: com.example.android.notepad.test
12:00:05 Running instrumentation test. Package: com.example.android.notepad.test testrunner: android.support.test.runner.AndroidJUnitRunner options: []
12:00:06 Instrumentation test has finished
12:00:07 Retrieving test artifacts
12:00:08 Retrieving any crash results
12:00:09 Retrieving logcat
12:00:10 Done. Test time=30 (secs)
12:00:11 Test is Finished

Instrumentation testing complete.

More details are available at [https://console.developers.google.com/project/test-project-1234/testlab/mobile/histories/bh.12345678910abcdfeg/executions/12345678910abcdfeg].
┌─────────┬──────────────────────────┬─────────────────────┐
│ OUTCOME │     TEST_AXIS_VALUE      │     TEST_DETAILS    │
├─────────┼──────────────────────────┼─────────────────────┤
│ Passed  │ Nexus5-21-ja_JP-portrait │ 1 test cases passed │
└─────────┴──────────────────────────┴─────────────────────┘

テストは成功しました。ここで、Test results will be streamed to...の部分で出力されいてるURLにアクセスするとコンソール上のテスト結果画面にアクセスできます。

test_lab_10.png

テスト結果にはログ、スクリーンショット、動画でのテスト実行の様子を確認できます。

test_lab_11.png

テスト結果の見方ついての詳細はAnalyze Firebase Test Lab for Android Resultsを御覧ください。

CIサービスからのテスト実行

CircleCIからFirebase Test Labでのテストを実行する方法についてまとめました。

まとめ

CLIからFirebase Test Labでのテストを実行できました。ドキュメントにしたがってコマンドを入力することで問題なく実行できたので良かったです。ただ、ドキュメントで紹介されているサンプルアプリのGradle Pluginバージョン、SDKバージョン、ライブラリバージョンが古いため注意が必要です。

参考

21
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?