![[GithubActions] AndroidアプリをFirebaseTestLabに連携しRoboテストを実行するまでの手順](https://devio2023-media.developers.io/wp-content/uploads/2019/07/github-eyecatch.png)
[GithubActions] AndroidアプリをFirebaseTestLabに連携しRoboテストを実行するまでの手順
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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のテスト実行する事ができるようになりました。 非常にお手軽かつある程度までは無料で使用できるので、スクショを楽に撮りたいな〜くらいの気持ちで導入して良いのではないかと思います。
それぞれまだまだ多くの機能がありそうなので、別の機会で掘り下げていければと思います。
以上です。ありがとうございました。








