Blog

MaestroとGitHub Actionsを使って、アプリの自動化テストを導入しましょう

💡 はじめに

こんにちは。ニフティ株式会社のLinです。
台湾出身のモバイルアプリエンジニアとして、社内で「マイ ニフティ(AndroidiOS)」の開発を担当しております。
今回は、マイニフティ Android 2.8.1 から導入したMaestroとGitHub Actionsによるテスト自動化についてご紹介します。

🪄 Maestroについて

Maestroは、Android・iOS・React Native・Flutterなどの各種モバイルプラットフォームに対応した、オープンソースの軽量UIテストフレームワークです。

基本利用は無料ですが、CIを導入するとMaestro Cloudは有料サービスです。ただし、GitHub Actionsを利用すれば無料で同様の機能を実現できます。

(節約できる費用はこちらで計算できます)

今回はこの裏技を紹介します。

 💭 事前準備

まずは下記のコマンドを使ってMaestroをインストールしましょう。

そして、やりたいことを整理しましょう。
実現できたらいいなと思うことを下記の通り並べてみました:

  • GitHub Actionsのプルリクで変更があれば自動的にテストフローを実行
  • 複数端末のテスト結果を確認できる
  • テスト結果をGitHubのコメントに自動投稿
  • エビデンスとしてテストの録画を確認できる

こういうことは本当にできるのか?!
答えはまさかのYES

どうやって実現するのか、一緒にやってみましょう! 🙌

💻 ローカルでの実装

CIによるテスト自動化を実現するため、下記の三つのものが必要です。

  • テストしたいアプリ
  • Maestroテストフロー
  • Github Actionsワークフロー

今回の例は弊社の会員アプリの「マイ ニフティ」で実装しました。
最初にアプリのbuild.gradleにアプリバージョンを取得するタスクを追加します。
(これは後のGitHub Actionsコメント機能で使われています)

Maestroテストフローは下記の通り追加していきます。
重複操作はoperationsにまとめ、テストフローはtestsに集約します。

使われたoperationsフローは下記の通り:

テスト用のtestsフロー例は下記の通り:

テストフローの作成について、一つ簡単な方法があります。
下記のコマンドを実行すると、Maesteo Studioを呼び出せて、画面をクリックしてテストフローを作成できます。

そして、テストフローが完成したら、ローカルで下記のコマンドを実行すると

テストフローが自動的に動き始めます。

startRecordingとstopRecordingが設定されているので、実行画面の録画も保存されています。

🐱 GitHub Actionsでの実装

動作できるMaestroフローがあれば、次はGitHub Actionsのワークフローを作りましょう。
.githubのworkflowsでandroid_maestro_tests.ymlを追加しよう。

このワークフローで下記の機能が実装されました:

  • エミュレーターはテストしたいAndroid SDKバージョンのPixel 6を指定、実行安定性を保証するためにram-size、disk-sizeとheap-sizeもデフォルト値より高い数値に設定しました
  • エミュレーターを利用するためKVMを有効化し、Productionのapkをビルドしてインストールパスを記録し、エミュレーターにapkをインストールしてMaestroテストフローを実行します
  • 実行成功したら、エミュレーターのキャッシュが保存され、次回実行する時に再利用されます
  • 先ほど追加したprintVersionNameタスクによりテスト対象アプリのバージョンを自動取得し、実行録画もartifactに自動保存、ダウンロードリンクを自動生成して、コメントにエビデンスを残します
  • 成功したら成功コメントを自動投稿、失敗したら失敗コメントを自動投稿

ワークフローで使われたIDとパスワードもGitHub → Settings → Secrets and variables → Actionsのsecretsに登録しましょう。

そして、自動テスト君が爆誕。

😎 成果

次回、リリースプルリクが作成された際に、呪文を詠唱すれば自動テスト君を召喚できます。

集いしテストフローが新たな力を呼び起こす!自動化の道となれ!
いでよ、自動テスト君!

冗談です (・ω・)
何もしなくても自動テスト君が自動的に召喚され動作します。

テスト成功・失敗した場合、実行エビデンスが自動生成され、ダウンロードして確認できます。
素晴らしいですね!

テスト結果は一目で確認でき、レコードをダウンロードすると実行録画も確認できます。

💁‍♂️ 補足

Maestroは便利ですが、よくある落とし穴もいくつかあります:

  1. Maestro 1.33.1以上では、度々「emulator not found」の問題が発生します
    • 詳細
    • ram-size、disk-sizeとheap-sizeを高めに設定するか、GitHub Actions Runners のスペックを増強することで、ある程度改善できます
  2. MaestroはWebViewに弱く、assertVisibleは度々失敗します
  3. 度々ボタン・文字を認識できない問題があります
    • 対象の contentDescription を追加したら改善できます(null にしないでください)

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!