10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Maestroは本当に最もシンプルで効果的なのか

Last updated at Posted at 2023-07-13

Maestroって何?

サンフランシスコにあるmobile.dev incが作ったモバイル向けUIテストフレームワークです
対応プラットフォームは iOS, Android, ReactNative, Flutter
公式の説明によると

Maestroは、最もシンプルで効果的なモバイルUIテストフレームワークです。
(原文をDeepL訳)

とあり、「最もシンプルで効果的」と言い切ってるところに興味を持ちました

テストシナリオはyamlでかきます
公式Exampleがわかりやすかったので、イメージとしてのせておきます

公式から読み取ったメリット

  • 最もシンプルで効果的😇
  • 対応プラットフォームが多い(iOS, Android, ReactNative, Flutter)
  • OSS(Apache License 2.0)

セットアップ(Mac)

Maestro cli を以下のコマンドでインストールします

$ curl -Ls "https://get.maestro.mobile.dev" | bash

なんと、これだけで使えます
※ただし、前提条件があります

  • Xcode version 14 以上
    コマンドラインツールがインストール済(iOSだけかも)
    (Xcode -> Preferences -> Locations -> Command Line Tools)
  • facebook/idb が必要(iOSだけかも)
  • Androidは.apkのみ(.aabはダメ!)
  • iOSは.appのみ(.ipaはダメ!)

テスト対象アプリ

以下アプリを使います

以前サンプルとして作成したOpenAI APIを叩くだけの簡単なアプリで、
動作イメージはこんな感じ

シナリオ

  1. アプリを起動する
  2. プロンプトを入力する
  3. Sendボタンをタップする
  4. レスポンスを待ち、エラーメッセージ「HTTP 401」が表示されることを確認する

シナリオを作る

はじめにリファレンスです
驚くほどコマンドが少ないです

1. アプリを起動する

appId: com.example.open_ai_sample.debug
---
- launchApp

説明するものがないほどシンプルですね
debug buildは.debugを忘れずに

2. プロンプトを入力する

入力する前にTextFeildを選択しないといけないですが、
どうやって(文字列?Id?)選択しようかな?ってなりますよね
そこで、Maestro Studioというツールがあります
ざっくり例えると簡易的なChromeデベロッパーツールのようなもので、
GUIで要素を選択するとtap, assert, conditionalなどの方法を提案してくれます
以下コマンドを打つとブラウザで起動します

$ maestro studio

詳しくはこちらへ

Maestro StudioでTextFeildを確認した結果、今回は文字列でタップします
文字列の場合見たらわかるじゃん!ってなりますが、
Resourceを設定している場合、Idが取得できるので超有能ツールです

- tapOn: "input prompt"

次にpromptを入力します

- inputText: "Hello World"

version 1.29.0 では unicode charactersが入力できません
開発中みたいなので、今後に期待です

3. Sendボタンをタップする

- tapOn: "Send"

4. レスポンスを待ち、エラーメッセージ「HTTP 401」が表示されることを確認する

- assertVisible: "ERROR : HTTP 401 "

文字列でassertします
最初、"HTTP 401"で試したのですが、assertionしてくれずにタイムアウトしてしまいました
ここで、Maestro Studioの出番です
一瞬で解決できました
(要素内の文字列の一部ではassertionしてくれない模様)

実行

作成したシナリオです。短すぎる!

maestro/SampleScenario.yaml
appId: com.example.open_ai_sample.debug
---
- launchApp
- tapOn: "input prompt"
- inputText: "Hello World"
- tapOn: "Send"
- assertVisible: "ERROR : HTTP 401 "

以下コマンドで実行します🚀

$ maestro test ./maestro/SampleScenario.yaml

maestro-sample.gif

使ってみて、気になったこと

  • まだ日本語入力ができない😭
  • ReactNative, Flutterはyamlも1つでOKなのかどうか🤔
  • スクロールを完全に同じ位置でとめることができるのか(1pxのズレも許しません)🤔
  • センサーなどのOS固有機能を含んだテストができるのか🤔
  • 通信のmock化がdeprecatedになっている(使いたい人は多いはずだが、代替が見当たらなかった)🤔

まとめ

自分はAndroidのUI Test(Espresso, UI Autometor)としか比較できないため、
最もシンプルかどうかはわからないですが、Espresso, UI Autometorとは比べ物にならないほど簡単でした
これならエンジニア以外でもシナリオを作成できるため、シンプルで効果的というのは頷けます

今回作成したシナリオは以下のリポジトリのmaestroディレクトリに置いているので、
cloneしてお手元で試せます

参考リンク

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?