プログラミングは芸術だ!

web系エンジニアの備忘録 「プログラミングは芸術」を座右の銘として日々勉強中 最近Androidもやってます

テストコードを書かなくても、自動的にアプリをテストしてくれるFirebase Test Labが凄い!

Firebase Test Labとは

Googleが保持、管理している端末でアプリのテストしてくれるサービスです

テストを実行しながら、単純なテスト結果だけでなく、ログ、動画、スクリーンショットなども収集してくれます

※ 現在はAndroid端末のみです

firebase.google.com


テストの種類

RoboTest と InstrumentationTest という2つができます

RoboTest

RoboTestはアプリのテストコードを書かなくても

Googleのロボットくんがアプリの内容にあわせて、ユーザー操作をシミュレートしてアプリを網羅的に動かしてくれます

クラッシュがあれば検知してくれるし、細かいログも収集してくれます

InstrumentationTest

いわゆるUIテストでうs

Espressoで記述したテストを実行します


設定

Firebaseではテストディメンションと呼びます

モデル、Android API レベル、ロケール、画面の向き、実端末、エミュレーター、各種APIレベルを選べます


実際にRoboTestをやってみた

今回はRoboTestを紹介します

RoboTestは一番単純なテストであればあれば設定はなにもいりません

(InstrumentationTestと共通なテストディメンションの設定は必要です)

この自作TODOアプリで実行したときの結果をまとめていきます

Firebase Test Lab アップロード画面1

apkをアップロードして

Firebase Test Lab アップロード画面2

実行するだけ

(Roboスクリプトも設定していますが、なくても大丈夫です)

これだけ! f:id:gamu1012:20180331170637p:plain

なにをやってくれるのか

Warning,Error,Fatalのログ

シミュレートした際に吐かれたログを見るころができます

Firebase Test Lab ログ出力1

Warning,Errorは減らすべきですが、セーフといえばセーフです

自分たちのアプリ外が出すこともあるので、内容をよく確認して対応するかどうか判断しましょう

Firebase Test Lab ログ出力2

Fatalはいわゆるクラッシュなので対応すること

(この時は意図的にクラッシュするようなコードでテストにかけました)

シミュレート時のスクリーンショットと動画

Firebase Test Lab スクリーンショット一覧

スクショや動画も撮ってくれる!

動画がめちゃくちゃ便利です!

パフォーマンスモニタリング

Firebase Test Lab パフォーマンス画面

CPU、メモリ、ネットワークを計測してくれます(APIレベル21以上の物理端末)

しかも動画が一緒に見れるので、どの処理が重いかなども調べやすいです


RoboTestは有効なのか?

基本の動作を保証するには十分なくらい網羅的に操作してくれている印象です

TODOアプリやリーダーアプリではであれば基本機能のテストはUnitテスト + RoboTestで済ませてもいいかもしれません

人力テストはPUSHやデータ引き継ぎなど複雑な機能のテストにフォーカスするべきです

もっと状態が多いようなアプリでうまく活用できれば、テスト工数をめちゃくちゃ削減できる気がします

どこまでRoboTestを信頼していいかというのは難しい問題ですが、十分に有効であることは間違いなさそうです


Q&A

Q.ログインとかできるの?

A.できるよ(ただしキャプチャ文字の入力などはできない)

入力場所を指示するか、Googleアカウントログイン

他の認証についての記述は見つからず、実際には試していないので、不明です


Q.広告のimpとか不正になりそうじゃない?

A.なるので連絡するようにとGoogleはいっている

Firebase Test Lab for Android の概要  |  Firebase


料金

firebase.google.com

Firebase Test Lab 料金表


Roboスクリプト

Roboテストの手順を書いたもの

AndroidStudioから操作のレコードベースで生成できる

やってみたが、重いわ思ったとおりのテストはしれくれないわで、全く使えなかった

Espressoのテストレコーダーのそうだが、レコード経由でなにかやるのは全くうまくいかない

だれかうまくいっている方がいましたら教えてください!


今回ふれていない内容

gcloudコマンドからの実行

CI


さいごに

Firebase Test Labを活用して安定稼働するアプリを実装しましょう!

f:id:gamu1012:20180331171117p:plain