O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

1.462 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

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触ってみませんか? まずは最初の一歩を

×