End-Users2017-11-13Bluepillを導入してiOSのUIテスト実行を並列化するiOSはじめまして、SWETグループの細沼(@tobi462)です。それに関連した勉強会(リジェクトコン)などが開催され、iOS開発者にとってはホットな時期だったかと思います。15分発表をさせていただき、発表者・参加者の両面からこれらのイベントを楽しめたと思っています。今回は、iOSDCでのLT発表の中で触れさせていただいたBluepillについて、実際の使い方などを掘り下げて紹介したいと思います。サンプルコード実際に動作するサンプルコードも用意しておきましたので、必要に応じてご利用ください。https://github.com/YusukeHosonuma/iOS-Bluepill-SampleHomebrewがインストールされていれば、READMEに書かれた手順に従って、実行するところまで行えるかと思います。Bluepillの動作確認サンプルであるため、アプリの内容に特に意味はありません。iOSアプリのUIテスト実行について、複数シミュレータを同時起動して並列で実行するツールです。並列でテストが実行されるため、UIテストの実行時間を短縮できるというメリットがあります。テストは自動的に分割(グルーピング)されるため、開発者が自分でテストの分割を意識する必要がないのも便利な点といえます。LinkedInが開発したツールで、GitHubリポジトリのREADMEによると巨大なテストスイートを妥当な実行時間で終わらせるために開発した、と書かれています。time.また、以下のツールにインスパイアされて開発したとも書かれています。test(pxctest)複数のOSバージョン・端末でテストを並列実行するツールで、端末カバレッジの網羅を目的としています。Facebook製ツールxctoolFBSimulatorControliOSシミュレータをAPIやコマンドラインから操作できるツールです。環境で確認を行っています。8.xの時点からBluepillは複数シミュレータ起動を実現していました。そのあたりからLinkedInのUIテストの実行時間短縮に対する本気度が伺えます。利用する必要があるので注意しましょう。置き換えて記載していきますので、必要に応じて自身の環境に読み替えてください。いう2つのバイナリが格納されていますが、両方とも必須なのでご留意ください。v2.0.2HomebrewでのインストールREADMEにも書かれていますが、Homebrewでもインストールが可能なので、こちらを利用するとより手軽にインストールできます。--versionBluepillただし、(2017/11/13時点では)上記のとおりバージョン番号の出力がされないという事象があります。これはIssueにも報告が上がっていますが、しばらく動きがないようなので、気になる方はGitHubのリリースページからダウンロードした方が確実かもしれません。設定から実行まで以下の2段階の手順で実行します。利用して、テスト実行用のアプリをビルドします。8から導入された機能で、ビルドとテスト実行を分離できる仕組みです。利用してテスト実行を行います。コマンドを使って実行します。されていますが、必須なのは以下の2つのみです。UIテスト実行が行われます。finished.またコマンドラインでオプションを指定する他にも、JSONで設定ファイルを用意する方法もあります。JSONで指定するキー名では-oなどの省略系は指定できませんので注意しましょう。オプションで作成したJSONファイルを指定して実行できます。フォルダの中身を見ると以下のようになっています。JUnit形式の結果XMLファイルとなっています。Jenkinsのプラグインなど、JUnit形式をサポートしているツールで読み込ませ、見やすい形で表示することも可能です。1から始まる数字のフォルダには、Bluepillにより自動的に分割された、各グループでのテスト結果やログなどが格納されています。確認するケースは多くないかもしれませんが、覚えておくと何かあった時に調査がしやすいでしょう。57%通常のテスト実行に比べて半分以下とまではいきませんが、かなり実行時間を短縮できることが分かるかと思います。形式になっており、XML形式で出力されています。<string>__TESTHOST__/PlugIns/xxxUITests.xctest</string>上記は重要と思われる部分のみを抜粋したものですが、箇条書きに直すと以下のようになります。UITargetAppPath__TESTROOT__/Debug-iphonesimulator/xxx.appTestHostPath__TESTROOT__/Debug-iphonesimulator/xxxUITests-Runner.appTestBundlePath__TESTHOST__/PlugIns/xxxUITests.xctest上から順に、それぞれ「テストターゲット」「テストランナー(ホストApp)」「テストバンドル」のパスとなっています。テスト実行に必要な各ファイルへのパスが記録されているということになります。この手のツールは実際に試してみると、思わぬところでエラーが発生して利用する気を失ってしまうということがありがちですが、こういった部分を理解しておくとそうした状況で早く解決できるかもしれません。ここでは比較的、重要と思われるオプションを紹介します。Fastlaneへの組み込みここまで見てきたように、Bluepillはかなり手軽に使い始めることができます。一歩進んで、Fastlaneから利用できるようにすると、さらに便利になります。指定することで行います。アクションを利用して、shellコマンドを前述のコマンドをそのまま実行します。追加している点に注意しましょう。ディレクトリで行われるため、1つ上のディレクトリを参照しなければならないためです。使用すると正しく解釈されないためそのままにしています。Fastlaneプラグイン今回は、JSONの設定ファイルを用いるアプローチを取ったのでshell実行で済ませてしまいましたが、GitHub上にいくつかBluepill用のFastlaneプラグインも公開されています。tbrand/fastlane-plugin-bluepillShashikant86/fastlane-plugin-bluepillarもし要件に合うものがあれば、そちらを利用するのも手かと思います。READMEに書かれた全てのオプションがサポートされているプラグインは無さそうでした。プラグインを利用するときには、そうした制限があることを理解した上で利用しましょう(個人的には設定ファイルに集約したほうが、メンテナンス性を上げられるかと思います)レーンの実行それでは用意した2つのレーンを利用して、ビルド・テストを実行してみましょう。メッセージが出力されれば成功です。Jenkins上で実行するここまで整備できていれば、Jenkins上で実行することも簡単です。ビルド手順の追加から「シェルの実行」を追加し、fastlaneコマンドを利用して先ほど用意したlaneを呼び出すようにします。いったように指定します。正常にビルドが成功すると、ビルドの結果画面などに「最新のテスト結果」がリンク表示され、その遷移先から詳細なテスト結果を確認することが出来ます。それぞれのテストにかかった時間も確認できるので、設定しておくと便利かと思います。まとめ今回は「Bluepill」についての紹介と、実際に利用するにあたってのインストール手順からFastlaneへの組み込み、Jenkinsへの設定まで紹介しました。この手のツールは実際に利用し始めるまでに予期せぬトラブルに遭遇して、面倒になってしまって結局使わないというケースもあると思い、分かりやすい記事を心がけてみたのですがいかがだったでしょうか。次回のブログ記事もお楽しみください。...2018-10-10WebdriverIOでAppiumを使う勘所こんにちは。SWETの外山(@sumio_tym)です。SWETの一員になっ...2018-05-30iOSデバイスの情報をアプリ内から取得するこんにちは。SWETの加瀬(@Kesin11)です。今回は、iOSデバイ...2018-01-16Golangでtestingことはじめ(1)〜testingパッケージを使ったユニットテスト〜こんにちは。Nightを立ち上げたSWETの@tarapoです。(1)リンクプライバシーポリシースターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。