Firebase Test LabのRobo testとは
Firebaseのリファレンスを引用して簡素に記載すると、アプリUIの構造を分析しユーザーのアクティビティを自動的にシミュレートして体系的な調査を行ってくれるテストツールとのことです。
アプリの機能によってはRobo testで自動化できないものもあるため、
完全自動化ではなくリグレッションテストの一部を自動化してみるという観点で利用してみます。
動作環境
・Android Studio Chipmunk 2021.2.1 patch 1
・Flutter:3.0.5
・Dart:2.17.6
前提条件
・Firebase Projectのセットアップが完了していること
・テスト可能なアプリケーションが作成済みであること
Robo testを実行してみる
初めにRobo testに投入するアプリはプロジェクト作成時に自動生成されるアプリになります。
その後、アプリに改良を加えてRobo testがどこまでシミュレートしてくれるのかを確認していきます。
テストアプリの挙動
1.さっそくFirebase ConsoleからRobo testを実行してみます。
Firebase Consoleの構築 > Test Labを選択します。
2.テストを実行するボタンを押してテストタイプのRoboを選択します。
3.Robo testを実行するアプリをアップロードします。
Androidの場合はAPK又はAAB形式のアプリが実行可能です。
4.テストの実行環境を選択します。
初回はプリセットもないので独自のプリセット作成からになります。
2回目以降で同じ実行環境を用いる場合はプリセットに登録しておくと便利です。
5.テストデバイスを選択します。
複数のデバイスとOSを選択可能で端末毎の動作差分とOSでの差分検知も幅広くできそうです。
テストデバイスの選択が終わるとRobo testが実行されます。
テストが完了すると登録しているメール宛に完了通知がきます。
Robo testの結果を確認する
Robo testが完了するとこのように実行結果が確認できました。
今回の実行環境は1デバイスのみだったので1件のみ結果が表示されてます。
さらに画面内でどのようなテストが行われたのかを詳細に表示することができます。
アプリの挙動が右下のフローティングアクションボタンをタップで画面中央の数字がインクリメントするだけでしたが、このテスト結果で正常に動作していることが分かります。
テストアプリを改良してRobo testを実行してみる
初めに試したテストアプリを改良して画面遷移の機能とドロワーメニューの機能を追加してみます。
このアプリをRobo testに投入してどのような結果が得られるのかを試してみます。
さっそく改良後のアプリでRobo testの結果を確認してみましょう。
追加したドロワーメニューの操作と画面遷移の操作それぞれが行われていることが確認できました。
Robo testでは画面内に表示されているユーザ操作可能なViewを自動で検知し、
遷移可能な画面全てを網羅するように実行されているようです。
Robo testでリグレッションテストを自動化するための課題
冒頭に記載しましたが完全自動化ではなく一部を自動化する観点でこれまでの検証を行いました。
ここでなぜ完全自動化ではないのか、Robo testを試してみた結果から見えてきた課題を記載していきます。
Robo testの制限
今回のテストアプリには存在しませんでしたが、WebView画面内の操作、
ログインが必須の画面に遷移する操作や認証情報,キャプチャの入力etcは、
通常のRobo testで実行することができません。
ではどうするのかというと、Roboスクリプトというものが用意されているようです。
このRoboスクリプトを作成することでログインなど通常では行ってくれない操作で
Robo testの実行が可能になります。
Roboスクリプトリファレンスガイド
またFCMと連携した機能についてはRobo testで動作担保をすることが難しいと思います。
Roboスクリプトでadbコマンドを使ったFCMでの受信は可能なのですが、
実際にはPushサーバetcとの連携をしているわけではないため、
こういった機能は手動でテストをする方が確実かと思います。
さいごに
リグレッションテストの一部自動化という観点で検証を行いましたが、
結論としてはアプリリリース前にRobo testを実行することである程度の品質は担保可能だと思いました。
Robo testにリグレッションテストの全てを任せることは難しいため、
どこまでをRobo testで担保しどこまでを手動でテストするのかの見極めをして、
リリースの度にかかるコストを削減していくことが大事ですね。