Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,242 views

Published on

iOS Test Night #6 - 1周年 - の発表資料です。

Published in: Technology
  • Be the first to comment

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

  1. 1. fastlane snapshotの 並列実行についてまとめてみた 2017/12/5(Tue) iOS Test Night #6 - 1周年 - 平田敏之(@tarappo)
  2. 2. 自己紹介 平田 敏之@DeNA SWET (Software Engineer in Test) 私がやっていること(一部) • クライアントアプリ周りのテスト戦略、自動テストの開発 • CI/CD環境整備 • テスト基盤環境の開発(マスティフ、ダルメシアン etc) • iOS / Android Test Night 主宰
  3. 3. 今日の流れ • snapshot • snapshotって? • 課題 • 従来の解決策 • テストの並列化 • 実験 • 実行環境 • 実行結果 • まとめ
  4. 4. snapshot • 指定端末・指定言語のスクリーンショットを簡単に撮ることが出来る • App Storeで利用する画像の用意 • ローカライズ検証のために利用 • 簡易的なUIテスト https://docs.fastlane.tools/actions/snapshot/
  5. 5. 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/
  6. 6. snapshot 課題 端末数・言語数が増えれば増えるほど実行時間が増加 0 350 700 1050 1400 1750 1台 2台 3台 4台 5台 6台 sec devices 3 languages
  7. 7. snapshot (今までの)解決策(の例) • 実行環境の並列化 • 仮にlanguagesが3種類だったとする • languages:[ ‘ja-JP’, ‘en-US’, ‘fr-FR’ ] • 以下のようにマシンを分割し実行すれば1/3程度になる • マシンA(ja-JP) / マシンB(en-US) / マシンC(fr-FR) 実行環境を用意するコスト 並列化できるように実装するコスト
  8. 8. テストの並列化(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
  9. 9. テストの並列化(2/2) • snapshotでテストの並列実行をおこなえる対応が入った • https://github.com/fastlane/fastlane/pull/9570 • 2017/8/22 • fastlane 2.54.0 • 12/2現在 :2.68.0
  10. 10. snapshot テストの並列化 • 利用方法 • 以下のパラメータをtrueにするだけ • concurrent_simulators: true • 湧き上がる疑問 • どのように並列化されるの? • シミュレーターの起動数は?
  11. 11. 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つを実行する
  12. 12. 実験 • 実行環境 • Mac Pro (Late 2013) 3.5 GHz 6コア / 16GB • OS: 10.12.6 • Xcode 9.1 上記環境で以下の内容で実行 • devices:1〜6台まで • languages:3種類 • 試行回数:5回
  13. 13. 実験結果 端末数 実行時間(秒) 並列実行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
  14. 14. 実験結果 0 350 700 1050 1400 1750 1台 2台 3台 4台 5台 6台 sec ON OFF
  15. 15. おわりに • snapshotでテストの並列化が「すごく簡単」にできるようになりました • snapshotを既に導入しているプロジェクト • (devicesの値が2つ以上なら)concurrent_simulatorsをtrueにしましょう • fastlaneのsnapshotを未導入のプロジェクト • snapshot触ってみませんか? まずは最初の一歩を

×