DroidKaigi 2018の2日目の最後のセッションで「UIテストの実行時間を短縮させる方法」というタイトルで登壇してきました。
本稿では、発表資料の軽い補足情報や登壇についての振り返りを書きたいと思います。
発表資料は以下になります。実は当日使ったものと多少違っていて、異なる点は宣伝(Android Test Nightがあるよという告知)がない点と微妙な文言の違いがあります。
動画が公開されるかと思いますが、周りの人の様子を見つつ歩きながら登壇するタイプなので、動画だと見づらいかもしれないのでご注意ください。
※なお、登壇用の原稿はないのでその情報は載せることが出来ません(事前に発表練習はするのですが、文字起こしはしてはいません)。
そもそもUIテストをテーマにしたことについて
今回UIテストをテーマにしたのは、そもそもとしてUIテストに関する知見が全般的に少ないからというのがあります。
知見が少なければ、それを利用しようとする際の敷居がどうしても高くなってしまいます。
そして、これらの知見は良い点よりも大変な点や課題となりうる点を共有するほうが良いと思っています。
そこで、UIテストをテーマにし何が課題としてあるかどうやって対応したら良いかを話すことにしました。
UIテストの課題の中から実行時間を選んだ理由
UIテストの課題はたくさんあります。
登壇資料にも色々と書きましたが、書いた内容以上に課題は現れてきます。
その課題があるということは知見として共有するべきことがたくさんあるということです。
その課題の中から「実行時間」を選んだ理由は、どのプロダクトにおいても起こりうる課題の1つという理由と効果を伝えるのが分かりやすいという点です。
また、実行時間の長さが原因でUIテストをやめるといった事例も見てきています。UIテストが利用されなくなり、その結果として知見が集まらなくなるのは悲しいことです。そのような事例が本発表によって減れば良いなという思いもありました。
UIテストの並列化をおこなった環境
並列化をおこなうためには実行環境も大事になりますが、実際に利用した実行環境についてそこまで触れることができなかったのでもう少し情報を明記しておきます。
- CI環境:Jenkins
- 端末管理:OpenSTF(デバイスファーム)
並列化をするには実行環境である端末が複数必要であり、それらの端末の制御(これは他の自動テストで使われている場合は使えないようにするなどです)をする必要があります。
そういった問題を今回利用したOpenSTFは解決してくれます。OpenSTFではAPIが提供されており、存在する端末の検索や予約から利用までできます。そして、そのAPIを利用したOpenSTF PluginといったJenkinsのPluginがあり、それを利用しています。
※このJenkinsのプラグインはSWETメンバーが開発しました&OpenSTFのAPI化は元SWETメンバーがおこなったものですと書いておきます。
今回は最大でも5並列ということにしていましたが、端末の数としてはもっと接続されていたのでもっと並列数をあげることもできました。
最近はJenkinsではなくCircleCIやBitriseを使っているケースが多いかと思います。
詳細は(長くなりすぎるので)記載はしないですが、これらのCIでも並列化をおこなうことは出来ますし、最近ではこれらのCIサービスでは簡単にデバイスファームと連携できるようになったりもしています。
さらなる実行時間の短縮
今回の登壇時では、当初かかっていたUIテストの実行時間の約40%まで下げることができました。
現在、なにに時間がかかっているかは把握しており、それを短くすることができることは分かっています。少なくともあと10%ちょっとはさらに下げることができます。大きく改善出来ると思っている箇所は以下です。
- テスト以外にかかっている時間の短縮
- 並列化における実行時間のばらつきの最適化
さらに、次の1年間の間にさらなる進化が世の中にはありますから、もっと短縮することが出来るものだと思っています。
それらの話を来年のDroidKaigiで話せたら嬉しいところかぎりです。
今回の登壇における課題
今回の登壇における課題がいくつかあると思っています。
- 事前にもう少し情報を展開するべきだった(資料の公開が遅かった)
当初はDroidKaigiの前の週末に公開して周知するつもりだったのですが、間に合いませんでした。
事前公開&周知によりもっとたくさんの方に聞きに来てもらえたのではという思いはあります。
- 当初考えていた独自サービスの話をあまりできなかった
並列化の一歩先の話は多少したのですが、開発しているサービスの話があまり出来ませんでした。
〆
Espressoの公式ページには以下の様なことが書いてあります。
Espresso is targeted at developers, who believe that automated testing is an integral part of the development lifecycle. While it can be used for black-box testing, Espresso’s full power is unlocked by those who are familiar with the codebase under test.
Espressoのfull powerを発揮できるのはプロダクトコード自体を知っている開発者自身ということです。
是非ともEspressoを使ってみてほしいです。
もっと色々と書きたいこともあるのですが、DroidKaigi 2019が来てしまいそうなのでこれぐらいにしたいと思います。