BitriseでもFlankを使ってFirebase Test LabでUITestしたい

# about

テストランナーFlankを使おうpart2。
BitriseでFlankを使ってiOSアプリのUITestを実行する方法です。

Bitriseで使う前にローカル環境で試したい方は以下の記事を参考にしていただければと思います。
Flankの使い方の基本的な事項もこちらで触れています。
[iOSでFlankを使ってFirebase Test LabでUITest](https://qiita.com/kanari3/items/6a55f5429658444f0d99)

BitriseにFlankのステップが公開されているのでこちらを利用します。
(Script書くのと手間は変わらないけれど)

# 環境

- Bitrise Stack Xcode 11.3.x, on macOS 10.14.6 (Mojave)
- Bitrise Flank Step v0.1.0

# 手順

## ソースコード側の設定

### リポジトリの設定

Bitriseから読み込む為にリポジトリにFlankのymlを含めます。
ここでは`flank.ios.yml`を`/.flank/flank.ios.yml`に配置しました。
ディレクトリが増えるのでそのうち`/.bitrise`以下に置きたい気持ちもありますね。

### flank.ios.ymlファイルの設定

ここでの設定項目は以下です。

#### 1. results-dir: 
Firebase Storageのディレクトリを指定します。
予め作らなくても自動で生成されます。

#### 2. record-video: 
trueでUITestの録画機能がONになりvideo.mp4ファイルが生成されます。

#### 3. timeout:
タイムアウトを設定します。
デフォルトは15分ですが、UITestは待ち時間も多いので最大値の30分にしておいて良いと思います。

#### 4. test: 
テストアプリをzipでアーカイブしたファイルへのパスです。

`$BITRISE_TEST_BUNDLE_ZIP_PATH`を指定します。

こちらは後述する`[BETA] Xcode Build for testing for iOS`ステップで生成される環境変数です。

#### 5. xctestrun-file: 
XCTestRunファイルへのパスです。
`$BITRISE_XCTESTRUN_FILE_PATH`を指定します。

こちらも`[BETA] Xcode Build for testing for iOS`ステップで生成される環境変数です。

### yml完成
出来上がったymlファイルは、コメントアウトの行を除くと以下のようになります。

```shell
gcloud:
  results-dir: flank-uitest
  record-video: true
  timeout: 30m
  test: $BITRISE_TEST_BUNDLE_ZIP_PATH
  xctestrun-file: $BITRISE_XCTESTRUN_FILE_PATH
flank:
```

汎用的な変数なので、環境問わずこちらで良いかと思います。

## Bitrise側の設定

### Env Vars

Google Credentials JSONを入れる環境変数です。

ない方は以下から作成できます。p12とjsonが選べる場合はjson形式でokです。
https://console.cloud.google.com/apis/credentials/serviceaccountkey

storageへ書き込む権限が必要です。

ここでは以下のファイルがダウンロードされました。
`kanari3-develop-ios-55a55aaa55aa.json`

こちらをエディタで開いてBitirseのSecretタブの環境変数にコピペします。

<img width="700" alt="env_json.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275986/4f235bc2-8923-9589-be84-182cf1180c57.png">

ここでは`GOOGLE_SERVICE_ACCOUNT_JSON`というKEYで登録しました。

※ 私はJSONをCodeSigningタブのGENERIC FILE STORAGEに登録しようとして3時間無駄にしました…

まるっと貼り付けます。
まるっと貼り付けるとはどういうことかというと。。。

<img width="600" alt="env_json_detail.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275986/f93c946f-574c-2e3a-08b3-8206752cc407.png">

こういうことです。Private Keyなど平文なので「Make it protected」化推奨。

### Workflowの追加

UITestを実行する最低限のワークフローを組みました。
私は共通処理をまとめていますが、試しやすいように組んもらえればOKです。

Pod installなど、ビルド環境が整った後のステップに
`[BETA] Xcode Build for testing for iOS`と`Flank`を追加します。

<img width="260" alt="Bitrise Workflow.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275986/d5b6734c-dd71-bb1c-c275-4afdf62d0dce.png">

Scriptステップは不要ですが、環境変数など気になる方はDebug用に入れてもよいかと思います。

### 「[BETA] Xcode Build for testing for iOS」ステップの設定

「Scheme name」の値がデフォルトでは`$BITRISE_SCHEME`ですが、基本UITest用のSchemeがあると思うので指定してください。
私は`$BITRISE_UITEST_SCHEME`という環境変数を用意してEnvにスキーム名を入れています。


### Flankステップの設定

このような設定項目があると思うので見ていきます。

<img width="600" alt=Bitrise Workflow editor.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275986/6816f5cf-80ae-23f0-34fc-1f445974413d.png">

#### Google Service Account JSON
先程作成したSecretの環境変数を入れます。
Enter valueを選択すると「Select secret variable」のボタンが表示されるので、そこを選択してリストを表示します。
「Choose Secret Env Var」の一覧から、先程作成した`GOOGLE_SERVICE_ACCOUNT_JSON`のKEYを探して選択すればOKです。

#### Config Path
`flank.ios.yml`へのパスです。
ソースコード側で`.flank/flank.ios.yml`に配置したので、BitriseのVagrant上だと以下になります。
`/Users/vagrant/git/.flank/flank.ios.yml`

## Bitrise Build

ビルドすると特別なことはなく終了します。

<img width="600" alt="flank_result.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275986/a6943ea7-7130-2251-8637-a87ecc746251.png">

ログの見方は以下と同じなので割愛しますが、テストレポートへのリンクが出力されます。
[iOSでFlankを使ってFirebase Test LabでUITest - ビルドしたFlankのjarを実行](https://qiita.com/kanari3/items/6a55f5429658444f0d99#%E3%83%93%E3%83%AB%E3%83%89%E3%81%97%E3%81%9Fflank%E3%81%AEjar%E3%82%92%E5%AE%9F%E8%A1%8C)

# おわり

次はUITestの並列実行について触れたいと思います。