Firebase Test Labのススメ

概要

無料枠でもFirebaseTestLab使って15台/day(3台*5回)をランダムテストとespresso使ったinstumentalTestを実行するようにしておくと便利かも.

Firebase Test Labとは

Firebaseが提供している一つのサービスで, firebaseが管理してる実際の端末, エミュレータ上でテストを実行し, 動画/スクリーンショット/logcatとして残してくれるサービス.

1度に3台まで1日あたり15台までを無料枠で利用することができる.

定期的に実行できる様に環境を整える

CircleCIでの定期実行の仕方についてのメモ.
.circleci/config.yml に以下のWorkFlowを追加する.
時間の指定はUTCになるので日本時間では9時間足しておく.

triggers:
  - schedule:
      cron: "0 1,4,7,10,13 * * *" # UTC. 10, 13, 16, 19, 22
jobs:
  - hoge # 定期実行したいjobをつなげていく

TestLabをremote実行できる状態を作る

login用のAuthenticationを作成する

コンソール画面から認証用のjsonを作成しておく.(下記の画像を参照)
「サービスアカウント」 => 「サービスアカウントを作成」 から, Test Labの管理者のアカウント作成を行い, formatをjsonとしてダウンロードする.

gcloud CLIの環境を作成する

CircleCIが用意しているDocker Image(circleci/android:api-26-alpha)はubuntuベースなので下記URLの手順にそってgcloud SDKをインストールできる.
https://cloud.google.com/sdk/downloads#apt-get

#!/bin/sh

export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install google-cloud-sdk
sudo apt-get install google-cloud-sdk-app-engine-java
echo $TEST_LAB_AUTH | base64 --decode > test_lab_auth.json
gcloud auth activate-service-account --key-file test_lab_auth.json

TestLabを実行するshellを組む

Test Labではパラメータコマンド実行時のパラメータでdeviceの指定やroboテスト, instrumentalTestのどちらかをするなどの指定指定をできるがyamlに定義しておくことができる.
https://firebase.google.com/docs/test-lab/command-line?hl=ja

# 無料枠を最大限使うには、virtual:2, pyhsical:1だと、5 test/day できる。
# 1test => all test codes

quick-robo-test:
  app: mobile/build/outputs/apk/mobile-develop-debug.apk
  type: robo
  max-steps: 100
  timeout: 90s
  async: true
  device:
    - {model: Nexus5X, version: 26, locale: ja}
    - {model: Nexus6P, version: 23, locale: ja}
    - {model: D6603, version: 21, locale: ja}
quick-inst-test:
  app: mobile/build/outputs/apk/mobile-develop-debug.apk
  test: mobile/build/outputs/apk/mobile-develop-debug-androidTest.apk
  type: instrumentation
  async: true
  device:
    - {model: Nexus5X, version: 26, locale: ja}
    - {model: Nexus6P, version: 23, locale: ja}
    - {model: D6603, version: 21, locale: ja}

上記のyamlをtest_lab.ymlと定義した上で下記のコマンドでtestを実行できる.

gcloud firebase test android run test_lab.yml:quick-inst-test

Androidのローカルテストまとめ

概要 Androidテスト全書なども発刊されたり、今回のDroidKaigi2019でもAndroidのテスト周りの発表が多かったように思います。 直近のプロジェクトでもテストのカバレッジ50%以上を目指してテストコードを書いているのでその中でのハマったところやどういった観点で...