fastlane snapshotの並列実行についてまとめてみた

15
fastlane snapshot 並列実行についてまとめてみた 2017/12/5(Tue) iOS Test Night #6 - 1 周年 - 平田敏之 (@tarappo)

Upload: toshiyuki-hirata

Post on 23-Jan-2018

907 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: fastlane snapshotの並列実行についてまとめてみた

fastlane snapshotの並列実行についてまとめてみた

2017/12/5(Tue)

iOS Test Night #6 - 1周年 -

平田敏之(@tarappo)

Page 2: fastlane snapshotの並列実行についてまとめてみた

自己紹介

平田敏之@DeNA

SWET (Software Engineer in Test)

私がやっていること(一部)

• クライアントアプリ周りのテスト戦略、自動テストの開発

• CI/CD環境整備

• テスト基盤環境の開発(マスティフ、ダルメシアン etc)

• iOS / Android Test Night 主宰

Page 3: fastlane snapshotの並列実行についてまとめてみた

今日の流れ

• snapshot

• snapshotって?

• 課題

• 従来の解決策

• テストの並列化

• 実験

• 実行環境

• 実行結果

• まとめ

Page 4: fastlane snapshotの並列実行についてまとめてみた

snapshot

• 指定端末・指定言語のスクリーンショットを簡単に撮ることが出来る

• App Storeで利用する画像の用意

• ローカライズ検証のために利用

• 簡易的なUIテスト

https://docs.fastlane.tools/actions/snapshot/

Page 5: fastlane snapshotの並列実行についてまとめてみた

snapshot導入手順

• Step

• fastlane snapshot init

• 以下のファイルが生成される

• fastlane/Snapfile

• fastlane/SnapshotHelper.swift

• UIテストを用意

• SnapshotHelper.swiftを利用

• snapshot(“filename”)を呼び出す

• Fastfile or Snapfileに設定を記載

• 実行したいdevices / languagesを指定

• snasphotの実行

• スクリーンショットが保存される

• Xcode9から撮れるようになったが、今までは?

DerivedDataPath/Logs/Test/Attachments/

Page 6: fastlane snapshotの並列実行についてまとめてみた

snapshot課題

端末数・言語数が増えれば増えるほど実行時間が増加

0

350

700

1050

1400

1750

1台 2台 3台 4台 5台 6台

se

c

devices

3 languages

Page 7: fastlane snapshotの並列実行についてまとめてみた

snapshot(今までの)解決策(の例)

• 実行環境の並列化

• 仮にlanguagesが3種類だったとする

• languages:[ ‘ja-JP’, ‘en-US’, ‘fr-FR’ ]

• 以下のようにマシンを分割し実行すれば1/3程度になる

• マシンA(ja-JP) / マシンB(en-US) / マシンC(fr-FR)

実行環境を用意するコスト並列化できるように実装するコスト

Page 8: fastlane snapshotの並列実行についてまとめてみた

テストの並列化(1/2)

• Xcode9 - What’s New in Testing -

• シミュレーターのテストの並列実行が出来るようになりました

• xcodebuild -workspace yourworkspace.xcworkspace -scheme yourscheme -derivedDataPath ‘derivedDataPath‘ -destination 'platform=iOS

Simulator,name=iPhone SE,OS=11.1' -destination 'platform=iOS Simulator,name=iPhone 6,OS=11.1' test

• destinationが複数指定出来るようになりました

• Xcode9の並列テストはどれだけ効果があるのか? by huin

• https://speakerdeck.com/huin/xcode-9-falsebing-lie-tesutohadoredakexiao-guo-gaarufalseka

Page 9: fastlane snapshotの並列実行についてまとめてみた

テストの並列化(2/2)

• snapshotでテストの並列実行をおこなえる対応が入った

• https://github.com/fastlane/fastlane/pull/9570

• 2017/8/22

• fastlane 2.54.0

• 12/2現在:2.68.0

Page 10: fastlane snapshotの並列実行についてまとめてみた

snapshotテストの並列化

• 利用方法

• 以下のパラメータをtrueにするだけ

• concurrent_simulators: true

• 湧き上がる疑問

• どのように並列化されるの?

• シミュレーターの起動数は?

Page 11: fastlane snapshotの並列実行についてまとめてみた

snapshotテストの並列化

• 起動数

• 実行するマシンに依存

• (hwprefs_available? ? `hwprefs thread_count` : `sysctl -n hw.physicalcpu_max`).to_i

• 上記コマンドで得られた値 - 1を起動数としている

• テストの並列実行

• 例:devices: [ “iPhone 5s”, “iPhone SE”, “iPhone 6”, “iPhone 7” ]

• devicesの数を元に並列化される

• 起動数が4以上であれば、一度に上記端末を実行する

• 起動数が3であれば、3つを実行した後に残りの1つを実行する

Page 12: fastlane snapshotの並列実行についてまとめてみた

実験

• 実行環境

• Mac Pro (Late 2013) 3.5 GHz 6コア / 16GB

• OS: 10.12.6

• Xcode 9.1

上記環境で以下の内容で実行

• devices:1〜6台まで

• languages:3種類

• 試行回数:5回

Page 13: fastlane snapshotの並列実行についてまとめてみた

実験結果

端末数実行時間(秒)

並列実行ON

実行時間(秒)

並列実行OFF

1台 250.2 251

2台 332.2 492

3台 416.2 725

4台 496.2 981.6

5台 558 1148.6

6台 764.6 1344.8

Page 14: fastlane snapshotの並列実行についてまとめてみた

実験結果

0

350

700

1050

1400

1750

1台 2台 3台 4台 5台 6台

se

c

ON OFF

Page 15: fastlane snapshotの並列実行についてまとめてみた

おわりに

• snapshotでテストの並列化が「すごく簡単」にできるようになりました

• snapshotを既に導入しているプロジェクト

• (devicesの値が2つ以上なら)concurrent_simulatorsをtrueにしましょう

• fastlaneのsnapshotを未導入のプロジェクト

• snapshot触ってみませんか?

まずは最初の一歩を