見出し画像

シンプルなMobile UIテストツールの「Maestro」をつかってみた!


はじめに


こんにちは。株式会社SHIFTにて自動化アーキテクトをしている荻野です。

モバイルネイティブアプリの自動化ツールだと代表的なものとして、Appium が上げられますが、今回は、Maestro というよりモダンなテストフレームワークを紹介します。

Maestroとは


Maestroは、主にモバイルアプリ(Android/iOS)のE2Eを簡単かつ、高速に実行できる用に設計されたOSSのテストフレームワークです。

モバイルUIテストフレームワークの前身(Appium, Espresso, UIAutomator, XCTest)から学んだ知識から基づいて開発されており、2022年にリリースされました。

Appiumが2012年にオープンソース化されたことと比較すると、比較的新しいツールになっています。

What is Maestro?

■Maestroの主な特徴

コード不要のフロー定義(YAMLベース)

.yamlファイルでテストスクリプトを記載。インタプリタ型のため毎回のコンパイルが不要。

シンプルなセットアップ

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

クロスプラットフォーム対応

ノーコード/ローコード開発可能

  • Maestro Studioを使用すれば、ノーコード/ローコード開発も可能。

テストフローの更新時に自動実行可能

  • テストコードが改修されたことを検知して、テスト実行を自動で行うことが可能(Continue Mode)。開発しながら頻繁に自動テストの作成/実行を繰り返すATDD(受け入れ駆動開発)に適している。

実際に「Maestro」を動かしてみる


■Maestroの環境構築

Maestroをインストールする

下記コマンドを実行するだけでインストールが完了します。

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

さっそく動かしてみる。

Emulatorの環境構築などについては、実施済みを前提としています。

今回は、1.39.13バージョンを使用しました。

サンプル用のフロー実行

Maestroでは、サンプルのアプリが用意されているので、下記コマンドを実施して、サンプルアプリをダウンロードします。

maestro download-samples

ダウンロードが終了すると、samplesフォルダがカレントフォルダに生成されるのでその後、公式の手順に従って、コマンドを実行します。

https://maestro.mobile.dev/getting-started/run-a-sample-flow

cd ./samples
unzip sample.zip
xcrun simctl install Booted Wikipedia.app
maestro test ios-flow.yaml
# ios-flow.yaml
appId: org.wikimedia.wikipedia
tags:
  - ios
  - passing
---
- launchApp

実行が完了すると、Wikipediaアプリが開かれてテストが完了します。

Continue Modeについて

Continue Modeも試してみます。 https://maestro.mobile.dev/cli/continuous-mode

Continue Modeは、テストスクリプトに変更を加えるたびに、テストが自動的に再開されます。そのため、新しいテストを最初から作成する場合に特に便利な機能です。

Continue Modeは、-cオプションを付与するだけです。

maestro test -c  ios-flow.yaml

実行すると通常と同様にテストが実行されます。 その後、ios-flow.yamlを下記に書き換えます。

# ios-flow.yaml
appId: org.wikimedia.wikipedia
tags:
  - ios
  - passing
---
- launchApp
- tapOn: "Next"

そうすると、自動で書き換えられたテストが実行され、Nextをタップした後のテスト結果となりました。

Maestro Studioについて

Maestro StudioはMaestro CLIに組み込まれているWebアプリで、接続しているデバイスをWeb上で操作しながら、テストスクリプトを作成することができます。

起動方法は、下記コマンドを入力するだけで、Maestro StudioがWebアプリとして起動します。

maestro studio

Maestro Studioを使用することで、ノーコード/ローコードでテストスクリプトを記述することができます。

https://docs.maestro.dev/getting-started/maestro-studio

Yamlの記法について

yamlはプログラミング言語ではないため、共通処理を書きたいときは、別ファイルにする必要がありました。

たとえば、Playwrightの場合だとログインの関数は

// loginHelper.ts
export async function login(page: Page, email: string , password: string) {
  await page.fill('input[name="email"]', email)
  await page.fill('input[name="password"]', password)
  await page.click('button[type="submit"]')
}
// test-login.spec.ts
import { test , expect } from '@playwright/test';
import { login } from './loginHelper';

test('Login test' , async ({ page }) => {
  await login(page, 'test@example.com', 'password123');
}

みたいになりますが、Maestroの場合だと

# login.yaml
appId: xxxx
---
- inputText: "${EMAIL}"
  id: "email_input"
- inputText: "${PASSWORD}"
  id: "password_input"
- tapOn: "ログイン"
# login-flow.yaml
appId: xxx
---
- lanchApp
- tapOn: "ログイン"
- runFlow: login.yaml
  env:
    EMAIL: test@example.com
    PASSWORD: password123

のように関数ではなく、yamlファイルをrunFlowで呼び出す形になります。

サポート外について


  • Gherkin記法には対応していない。

  • 物理的なiOSデバイスをサポートしていない。

  • Androidの場合、Unicode文字列の入力は未対応

  • シンプルがゆえに複雑な処理の自動化は難しい。

などがあります。しかしMaestro自体も頻繁にアップデートされているため、いずれ上記のデメリットも解消する可能性があります。(2025/2時点)

まとめ


ATDD(Acceptance Test-Driven Development)のような開発サイクルの中でテスト設計、実装、リファクタを行う開発手法においては、Maestroは向いていると思います。

  • Maestroでは、YAMLファイルで書かれるため、コードの知識がなくても直感的に理解しやすいこと。

  • 記述がシンプルであるため、テストコード実装のコストも従来のフレームワークより低くなることが見込まれる。

  • テストフロー更新時に自動実行可能であることから、新規スクリプトの作成に向いている。(素早くGreenを達成できる)

リリースしてからも頻繁なアップデートが行われているため、今後NativeアプリのUIテストフレームワークの一つとして選択肢に挙がってくるではないでしょうか。


執筆者プロフィール:荻野 善祥
某Slerで、組込機器の自動テスト開発/運用を経験後、SHIFTへ入社。
入社後は、Webの自動テスト開発/運用やアジャイルQAについて日々、奮闘中。
めんどくさがりのため、仕事や家庭でも、自動化・効率化を推進している。
モットーは、「あとは機械にお任せ」。

SHIFTへのお問合せはお気軽に

\無料ダウンロード/お役立ち資料はこちら

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/

PHOTO:UnsplashAndras Vas