UIテスト実行時間の短縮
UIテストの実行時間短縮には次の2つの方法がある。
方法 |
---|
ビルドとテストの実行を分離する |
テストの実行を並列化する |
ビルドとテストの実行を分離する
通常、Xcodeからテストを実行するときには次の2つのステップで実行される
- テスト用アプリのビルド
- ビルドしたアプリでのテスト実行
GUIではなく、CUIの xcodebuild
コマンドではこれらを別々に実行できる。
- build_for_testing
- test_without_building
fastlane
を使って次のように2つ lane を用意しておくと便利。
■ A
lane :build_for_testing do scan( derived_data_path: "my_folder", build_for_testing: true ) end
■ B
lane :test_without_building do scan( derived_data_path: "my_folder", test_without_building: true ) end
事前に A
を実行しておき、そのビルドで作られた成果物を保存しておく。
テスト用のアプリをビルドし直す必要がないときは B
のみでテストを実行すると、アプリ生成の時間を短縮して実行ができる。
テストの実行を並列化する
Xcode10から複数のiOSシミュレーターを起動させテストの並列実行が可能になった。
Xcode > Edit Scheme > Test > Infoタブ > Options
Execute in parallel on Simulator
のチェックで有効になる。
これをONにすると、1つの親シミュレーターからクローンが作られ並列にテストが実行される。この並列化はテストコードのクラス単位で勝手に分割して行ってくれます。
従って、テストコードが1つのクラスしか存在しない場合は、並列事項されない。(逆にいうとクラス内の連続性は担保される)
このような仕様のため、1つのクラスに多くのテストを書くと並列実行されず時間がかかる。そのため、可能であればクラスを分割しておくのがよい。(A -> A1 + A2 + A3 など)
コマンドラインから利用する際は、xcodebuild
のオプションが用意されている。
オプション | 説明 |
---|---|
-parallel-testing-enabled YES/NO | テストの並列実行するかどうか |
-parallel-testing-worker-count NUMBER | 並列実行上限 |