[GithubActions] AndroidアプリをFirebaseTestLabに連携しRoboテストを実行するまでの手順
はじめに
FirebaseTestLabをGithubActionに組み込み、AndroidアプリのRoboテストを実行するまでの手順をまとめました。 どちらも使用するのが初めてなので、それぞれ単体で実行してみた後に連携させてみようと思います。 今回使用したプロジェクトはこちら
FirebaseTestLabを試してみる
FirebaseTestLabでのAndroidアプリのRoboテストを実行してみます。
- Firebase上にプロジェクトを作成する コンソールから「プロジェクトを追加」を選択し、説明に沿って作成します。(私は基本的にAndroidStudioの[Tools]->[Firebase]から作成してます)
-
apkファイルをアップロード
デフォルトのRoboテストを実行する手順はこれだけです。 スクショや動画、パフォーマンスを含めたテスト結果を表示してくれます。
Github ActionsでCI環境を構築してみる
- Github内の[Actions]という項目から、Android CIを選択
- デフォルトで[Android.yaml]が作成されるのでコミット
下のファイルが作成されます。 masterブランチに対するコミット or PRでCIが走りジョブが実行されるように記述されています。(構文についてはこちらが大変参考になりました。)name: Android CI on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew build
-
コミットをトリガーにCIが実行される。 緑になったらビルド成功です。
FirebaseTestLabに連携する
Firebaseとの連携の前にジョブをtest,build,firebase(後述)の三つに分割し順に実行されるように整理します。 またFirebaseTestLab向けにapkファイルを作成するbuildジョブを追記しています。 今回はデフォルトで作成されるテストしかありませんが、はじめにプロジェクトのUnitテストを実行する修正も追加しています。
jobs: test: name: Unit Tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Run Unit tests run: bash ./gradlew test --stacktrace build: name: Build Apk needs: test runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: bash ./gradlew assembleDebug --stacktrace - name: Upload app APK uses: actions/upload-artifact@v1 with: name: app-debug path: app/build/outputs/apk/debug/app-debug.apk firebase: 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
buildジョブが成功した段階でapkファイルが作成される様になりました。
ここからFirebaseTestLab用のジョブを追記していきますが、その前にいくつか事前準備が必要です。
事前準備
事前準備としてGithubのSecretにGCPのアカウントキー、FirebaseのプロジェクトIDを設定します。
- Firebaseプロジェクトの設定画面 → 「サービス アカウント権限の管理」を選択
- 「firebase-adminsdk」の操作 → 「鍵を作成」を選択 json形式でDL
- jsonファイルからbase64化した値を取得
cat {ダウンロードしたファイル名} | base64
- [GitHub] Secretに取得した値を登録
- [GitHub] SecretにProjectID*を登録
*Firebaseプロジェクトの設定画面 → 「全般」 から確認できます。
[Android.yaml]に戻ります。
firebase: name: Run Test on Firebase Test Lab needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Download APK uses: actions/download-artifact@v1 with: name: app-debug - name: Login to Google Cloud uses: GoogleCloudPlatform/github-actions/setup-gcloud@master with: version: '290.0.1' service_account_key: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }} project_id: ${{ secrets.FIREBASE_PROJECT_ID }} export_default_credentials: true - run: gcloud info - name: Run Test on Firebase Test Lab run: gcloud firebase test android run --type robo --app app-debug/app-debug.apk --device model=Pixel2,version=28,locale=ja,orientation=portrait
- name: Login to Google Cloud
部分について
GoogleCloudにログインする為にGoogleCloudPlatform/github-actions/setup-gcloud@masterのプラグインを使用します。使い方はREADMEに詳しく記載されていますが、service_account_key/project_idがそれぞれ先ほどSecretに登録したキーを参照する様に記述します。
- Run Test on Firebase Test Lab
部分について
GoogleCloudSDKのコマンドを実行しています。詳しいコマンド一覧は公式リファレンスに載っています。
今回はrobo
テストをPixel2/apiバージョン:28
に対して実行します。
変更をプッシュしてみます。
ワークフローが成功し・・・
Roboテストが実行されていました。
終わりに
Masterブランチにプッシュorプルリクエストするだけで自動的にFirebaseTestLabのテスト実行する事ができるようになりました。 非常にお手軽かつある程度までは無料で使用できるので、スクショを楽に撮りたいな〜くらいの気持ちで導入して良いのではないかと思います。
それぞれまだまだ多くの機能がありそうなので、別の機会で掘り下げていければと思います。
以上です。ありがとうございました。