iOSアプリのプロジェクトにユニットテストとUIテストが両方あるのですが、1つのワークフローで両方を実行するととんでもなく時間がかかってしまうので、UIテストだけを実行するワークフローを作りたいと考えました。
もう少し具体的に説明すると、以下の2つのワークフローを作りたいと思っていました。
- primary: ユニットテスト+DeployGateへのアップロード。PRへのプッシュやdevelopブランチへのマージでトリガーされる
- uitest: UIテストのみ実行する。1日1回のスケジュール実行およびリリースワークフローに組み込む
これらはXCodeプロジェクトのスキーマと、BitriseのXCode Test for iOSステップを設定することで実現可能です。
以下、順を追って設定方法を説明します。
XCodeプロジェクトの作成とBitrise連携
テスト用のプロジェクトを作成します。 Include Testsにチェックを入れておいてください。
Initialコミットのままで良いので、コードをGithubに上げて、Bitriseと連携させてください(ここらへんの説明は省略します)。
デフォルトだとユニットテストとUIテスト両方実行される
GithubとBitriseを連携すると1回目のビルドが実行されます。
ビルドのログを見ると、ユニットテストとUIテストの両方が実行されているのがわかります。
XCodeでProduct > Scheme > Edit Scheme...を開くと、以下のような画面が表示されます。
BambooCIAppTestsとBambooCIAppUITestsの2つのテストターゲットがEnabledになっているため、両方のテストが実行されます。
スキーマを作成する
新しくBambooCIApp+UITestsという名前でスキーマを作ります。
BambooCIAppのスキーマ設定画面を開いて(上記の画面)、Duplicate Schemeボタンをクリックして作成します。
BambooCIApp+UITestsではBambooCIAppUITestsのみEnabledにします。
※Sharedにチェックを入れるのを忘れないでください
元々あったBambooCIAppでは、BambooCIAppTestsのみEnabledにします。
スキーマを作成するとxcschemeファイルが作成されるので、コミットしてプッシュしてください。
UIテスト用ワークフローを作成する
Bitriseのワークフローエディタで、primaryワークフローをベースにuitestワークフローを作成します。
そして、XCode Test for iOSステップを選択し、Scheme nameにBambooCIApp+UITestsを指定します。
ワークフローを実行する
primaryワークフローとuitestワークフローを実行してみます。
primaryワークフローではユニットテストのみ、uitestワークフローではUIテストのみがそれぞれ実行されているのがわかります。