bluepillを使ったios自動テストの並列化
TRANSCRIPT
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS Test Night #32017/03/13(Mon)平田敏之 @DeNA
Bluepill を使った
iOS 自動テストの並列化
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
平田 敏之 @DeNA⁃ SWET (Software Engineer in Test)• 事業サポートチーム / テスト基盤チーム
• ミッション⁃ DeNA サービス全般の品質向上
⁃ DeNA エンジニアの開発生産性向上
⁃ 私がやっていること ( の一部 )• クライアントアプリ周りのテスト戦略、自動テストの開発
• CI/CD 環境整備
• テスト基盤環境の開発
• iOS Test Night 主催⁃ iOS 以外の Test Night も開催したいと目論んでいる
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日の発表の流れ (5 分 )
はじめに⁃ iOS の自動テスト導入後のツラミ ( 一部 ) について
解決策になりうる Bluepill とは?⁃ 簡単な説明⁃ 利用方法⁃ デモ
終わりに
Copyright © DeNA Co.,Ltd. All Rights Reserved.
はじめに
自動テストには苦労する点が色々あります⁃ 導入するまでの苦労⁃ 導入してからの苦労
自動テストを導入して苦労する点 ( の一部 )⁃ テストの実行時間• テストの終了が待てなくなってくる ( 特に UI テストが増えてくると…
⁃ iOS シミュレーターの不安定さ
そんな、解決策を色々と模索している最中に Linkedin が Bluepill を公開
⁃ 参考記事• https://www.infoq.com/jp/news/2017/01/linkedin-bluepill-ios-testing
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Bluepill とは? 一体なに?
⁃ LinkedIn が公開した複数の iOS シミュレーターを使って自動テストを実行可能にしてくれるもの
何が嬉しいの?⁃ iOS シミュレーターを複数実行しテストを並列実行できる• テストケースを分割して実行してくれる
⁃ 許容リトライ数やタイムアウトなど色々と設定できる• さらにヘッドレスまで可能!
注意点「だった」ところ (3/10 まで )⁃ Xcode UI Tesing はサポート外! ( だった )
• README には以下のように書かれていた⁃ Unfortunately, we don't support Xcode UI Testing bundles yet and we are working on that [**help wanted**].
⁃ ※ ただし現時点 (3/11) では release はされていない※
⁃ Unit Testing Bundle は元々サポートしているので KIF や EarlGrey が使える
Copyright © DeNA Co.,Ltd. All Rights Reserved.
利用方法 (1/2)
事前準備 (Bluepill は DL 済みとします )
build for testing で対象となるテストコードを build する
⁃ Case 1) Xcode から作成する
⁃ Case 2) xcodebuild を利用する• 例 ) xcodebuild build-for-testing –workspace <path> -scheme <name> -destination <specifier>
• 成果物の一部 ) xxxx.app( この app 内部の Plugins dir に xxxx.xctest が含まれている )
⁃ Case 3) fastlane を利用する xcodebuild(
workspace: ' 対象の workspace',
scheme: ‘ テストの scheme',
destination: 'platform=iOS Simulator,name=iPhone 5s,OS=latest',
derivedDataPath: ‘ 保存先 ',
xcargs: "build-for-testing"
)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
利用方法 (2/2)
BluePill の実行方法⁃ コマンドからオプション指定で動かす
• ./bluepill -a ./Sample.app -s ./SampleAppTestScheme.xcscheme -o ./output/⁃ ここの Sample.app は前提でビルドして生成された app ファイル
⁃ 事前に用意した Config ファイルを指定してコマンドから動かす• ./bluepill -c config.json
オプション ( 詳細は https://github.com/linkedin/bluepill/blob/master/README.md)⁃ 必須
• 対象となる app → app | -a• 結果出力 → output-dir | -o• 対象となる scheme のパス → scheme-path | -s
⁃ 任意• シミュレーターの起動数 → num-sims | -n (4)• テストのタイムアウト (sec) → test-timeout | -T (300s)• ヘッドレス → headless | -H (off)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デモシミュレーター起動数: 2テストケース数: 4
起動方法./bluepill –c config.json
実行の流れ1) Create Simulator2) Started Simulator3) Install Appliication4) Launch Application5) Tests started6) Tests Completed7) Delete Simulator
Copyright © DeNA Co.,Ltd. All Rights Reserved.
最後に - 皆さんが思う ( であろう ) 疑問と返答 -
そんなに並列化する必要あるか?⁃ 自動テストが増えてくると実行時間は悩みのタネになります• 実行時間が問題となり自動テストが放置されるというケースもあります
テストの数が少ないうちから使う必要があるか?⁃ テストの待機時間や、リトライ数などを設定できるだけでなく
Junit 形式でテスト結果を出せるので最初から使っても効果はある
※ 利用方法の詳細などは Qiita に掲載しました※http://qiita.com/tarappo/items/f2ff7f2e72a2663f0525