🎵

Mobile UI Testing Framework の「Maestro」を試してみる

2022/12/08に公開

この記事は株式会社マネーフォワードの福岡開発拠点が主催している Money Forward Fukuoka Advent Calendar 2022 の8日目の記事です。

昨日はナカザトさんによる「フロントエンドエンジニアインターンの話(マネーフォワード Pay for Business の場合)」でした。


こんにちは。普段主に iOS アプリの開発をしている konomae と申します。

Advent Calendar 用にモバイル関連で何か話題ないかなと考えていたところ、最近登場した Mobile UI Testing Framework の「Maestro」が面白そうだったので紹介してみようと思います。

Maestro とは

公式のドキュメントによると

https://maestro.mobile.dev/
Maestro is the simplest and most effective mobile UI testing framework.

Why Maestro?
Maestro is built on learnings from its predecessors (Appium, Espresso, UIAutomator, XCTest) and allows you to easily define and test your Flows.

とのことで、Flow と呼ばれる UI テストを定義可能で、それをいい感じに実行してくれるというもののようです。iOS と Android に対応しています。一般に公開されたのは今年の9月ごろで、以来活発にリリースされ続けています。Maestro CLI は GitHub 上でオープンソースで開発されています。

ローカルで実行する Maestro CLI のほか、クラウド環境で実行してくれる Maestro Cloud も提供されています。この記事ではローカル環境での実行までを検証してみようと思います。

ちなみに筆者は Appium や Espresso などには精通していないため、それらとの比較はこの記事では行いません。

検証環境について

Maestro 自体は Windows や Linux でも動作するようですが、今回は筆者に馴染みのある mac OS 環境で iOS の UI Test を試してみようと思います。これらがインストール済みである前提で進めていきます。

  • mac OS 13.0
  • Xcode 14.1
  • iOS 16.1 (Simulator)
  • homebrew

インストール

では、早速使ってみましょう。ドキュメントも必要十分揃っているので、特に迷うことはないかと思います。

Installing Maestro のページの記載のとおり maestro の cli と iOS のシミュレーターを操作するために idb-companion のインストールを行います。

brew tap mobile-dev-inc/tap
brew install maestro

brew tap facebook/fb
brew install facebook/fb/idb-companion

これで準備完了です。

Flow を作ってみる

などを参考に、Flow (テスト) を作ってみます。

これら以外にもドキュメントが充実しているので、一通り目を通しておけばスラスラ描けるようになるのではないかと思います。

iOS Simulator にリマインダーアプリが最初から入っているので、操作対象をリマインダーアプリにして、予定を登録する Flow を作ってみます。以下のような感じで yaml ファイルを記述します。

# flow.yaml

appId: com.apple.reminders
---
- launchApp
- tapOn: "新規"
- inputText: "Merry Christmas"

これを実行する場合は以下のコマンドを実行します。

maestro test flow.yaml

maestro test image

こんな感じで、Flow を作成し、実行することができました🎉

Continuous Mode

上記ではコマンドを実行して完了したらそのまま終了していたので、ファイルを修正する都度コマンドの実行をする必要がありました。

しかし、Continuous Mode というものがあり、こちらを利用することで Flow を修正すると自動で再読み込み&再実行をしてくれます。実際に Flow を記述する際は何度も何度も修正しながら作り上げていくと思うので、とても便利な機能だと思います。

利用は簡単でコマンドラインのオプションを指定するだけです。

maestro test -c flow.yaml

View Hierarchy

なんか上手くいかないな、どうやって要素を指定すれば良いかな、みたいな時は View Hierarchy を確認しながら作業すると良いかもしれません。

maestro hierarchy

で、maestro がどのように画面を見ているかを表示してくれます。

感想

この記事では Maestro CLI を使って簡単な Flow を実行する流れを確認してみました。

Flow ファイルは割と簡単に記述できるように感じたので、エンジニア以外の方でも作りやすくなっているように感じました。また、ローカル環境で Continuous Mode を使えば、何度も何度も繰り返し試しながら Flow を作り上げていく作業も割と快適にできるように思いました。yaml ファイルなので git で管理してコードレビューしたりも可能だと思います。

ただ一方で、まだ登場したばかりのものではあるので、inputText で日本語を入力できないなどの制限があるのも事実なので、なかなかうまく実行できない場面は出てくるかもしれません。

Maestro CLI 自体は OSS で開発されておりリリースも活発ですし、Cloud の実行環境を提供していたり、Flow の分割実行、条件分岐など今回紹介しきれなかった様々な機能を持っていたりするので、今後の発展が楽しみだなと思いました。

Discussion