iOS on BitriseでUIテストだけを実行するワークフローを作りたい

iOSアプリのプロジェクトにユニットテストとUIテストが両方あるのですが、1つのワークフローで両方を実行するととんでもなく時間がかかってしまうので、UIテストだけを実行するワークフローを作りたいと考えました。

もう少し具体的に説明すると、以下の2つのワークフローを作りたいと思っていました。

  • primary: ユニットテスト+DeployGateへのアップロード。PRへのプッシュやdevelopブランチへのマージでトリガーされる
  • uitest: UIテストのみ実行する。1日1回のスケジュール実行およびリリースワークフローに組み込む

これらはXCodeプロジェクトのスキーマと、BitriseのXCode Test for iOSステップを設定することで実現可能です。
以下、順を追って設定方法を説明します。

XCodeプロジェクトの作成とBitrise連携

テスト用のプロジェクトを作成します。 Include Testsにチェックを入れておいてください。

f:id:bamboohero:20210420010615p:plain:w500

Initialコミットのままで良いので、コードをGithubに上げて、Bitriseと連携させてください(ここらへんの説明は省略します)。

デフォルトだとユニットテストとUIテスト両方実行される

GithubとBitriseを連携すると1回目のビルドが実行されます。
ビルドのログを見ると、ユニットテストとUIテストの両方が実行されているのがわかります。

f:id:bamboohero:20210420011136p:plain:w700

XCodeでProduct > Scheme > Edit Scheme...を開くと、以下のような画面が表示されます。
BambooCIAppTestsとBambooCIAppUITestsの2つのテストターゲットがEnabledになっているため、両方のテストが実行されます。

f:id:bamboohero:20210420011427p:plain:w700

スキーマを作成する

新しくBambooCIApp+UITestsという名前でスキーマを作ります。
BambooCIAppのスキーマ設定画面を開いて(上記の画面)、Duplicate Schemeボタンをクリックして作成します。
BambooCIApp+UITestsではBambooCIAppUITestsのみEnabledにします。
※Sharedにチェックを入れるのを忘れないでください

f:id:bamboohero:20210420011903p:plain:w700

元々あったBambooCIAppでは、BambooCIAppTestsのみEnabledにします。

f:id:bamboohero:20210420012024p:plain:w700

スキーマを作成するとxcschemeファイルが作成されるので、コミットしてプッシュしてください。

UIテスト用ワークフローを作成する

Bitriseのワークフローエディタで、primaryワークフローをベースにuitestワークフローを作成します。
そして、XCode Test for iOSステップを選択し、Scheme nameにBambooCIApp+UITestsを指定します。

f:id:bamboohero:20210420012454p:plain:w500

ワークフローを実行する

primaryワークフローとuitestワークフローを実行してみます。
primaryワークフローではユニットテストのみ、uitestワークフローではUIテストのみがそれぞれ実行されているのがわかります。

f:id:bamboohero:20210420012815p:plain:w500
primaryワークフローの実行ログ

f:id:bamboohero:20210420012648p:plain:w500
uitestワークフローの実行ログ