Edited at
AndroidDay 14

Firebase Test Labでのテストの設定をCircleCI Orbsとして公開する


概要

先週DeployGateでのAPK配布設定をCircleCI Orbsとして公開するという記事を書いたのですが、Orbsが面白いのでAndroidアドベントカレンダーもOrbsネタで書こうと思います。

CircleCIでFirebase Test Labでのテストを実行するための設定はTesting With Firebase Test Labという形で公式ドキュメントにまとめられていますが、より簡単に設定ができた方が便利です。

今回、CircleCI Orbsとして設定を公開することでFirebase Test Labの設定を簡単にできないか試してみました。


Orbとは?

.circleci/config.ymlでの設定内容をパッケージとしてまとめ、再利用可能な形で公開できる機能です。CircleCI 2.1 configuration(2018/12/7時点でプレビュー)で追加されました。Orbの詳細は公式ドキュメントをご覧ください。

OrbとしてFirebase Test Lab向けの設定内容をまとめ公開することで、Firebase Test Labによるテストを含むWorkflowをより素早く構築することが可能になるはずです。


公開したOrb

Orb registryのページはこちらです。

https://circleci.com/orbs/registry/orb/horie1024/firebase-test-lab

また、ソースコードはこちらになります。

https://github.com/horie1024/orb_firebaae_test_lab


使い方


Enable build processingを有効化

CircleCI 2.1 configurationは2018/12/7時点でプレビューであるので、プロジェクトのSettings->Advanced SettingsでEnable build processingをOnにします。


Orbのimport

.circleci/config.ymlに次の設定を追加しOrbをimportします。versionは2.1を指定してください。

version: 2.1

orbs:
firebase: horie1024/firebase-test-lab@volatile


コマンドの実行

firebase/testコマンドでFirebase Test Labでのテストを開始します。

firebase/test:

service_account_key: SERVICE_ACCOUNT_KEY
firebase_project_id: FIREBASE_PROJECT_ID
type: instrumentation
test_settings: test_settings.yml:instrumentation-test

service_account_keyには、GCP Projectのサービスアカウントキー1をbase64エンコードした値を格納した環境変数を指定します。また、firebase_project_idにはFirebaseプロジェクトのIDを、typeには、instrumentationもしくはroboを指定します。

test_settingsには、次のようなymlを指定することでテストを実行するデバイスを指定できます。

instrumentation-test:

device:
- model: Nexus5
version: 21
locale: ja_JP
orientation: portrait
- model: mata
version: 25
locale: ja_JP
orientation: portrait

その他パラメーターの詳細はOrbのドキュメントをご覧ください。

https://circleci.com/orbs/registry/orb/horie1024/firebase-test-lab#commands-test

最終的なconfig.ymlは次の通りです。

version: 2.1

orbs:
firebase: horie1024/firebase-test-lab@volatile

jobs:
build:
docker:
- image: circleci/android:api-28-alpha
steps:
- checkout
- run:
name: Download Dependencies
command: ./gradlew androidDependencies
- run:
name: Build debug APK and release APK
command: |
./gradlew :app:assembleDebug
./gradlew :app:assembleDebugAndroidTest
- firebase/test:
service_account_key: SERVICE_ACCOUNT_KEY
firebase_project_id: FIREBASE_PROJECT_ID
type: instrumentation
test_settings: test_settings.yml:instrumentation-test


Androidプロジェクトでの使用例

実際に今回公開したOrbを使用してFirebase Test Labでのテストを実行してみました。サンプルプロジェクトはこちらです。


テスト結果の確認

テスト結果はArtifactsタブから確認でき、テスト実行中のスクリーンの様子も簡単に確認できます。


まとめ

設定をOrbとして公開することでCircleCIからより簡単にFirebase Test Labでのテストを実行できるようになったと思います。

今回公開したOrbに足りない機能や不具合がありましたらPull Requestをよろしくお願いします🙏

https://github.com/horie1024/orb_firebaae_test_lab





  1. サービスアカウントの作成や環境変数への格納についてはこちらの記事でまとめています。