This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

EAS Workflows で Maestro による E2E テストを実行する

ページを編集

EAS Workflows 上で Android と iOS の開発ビルドを使い、Maestro によるエンドツーエンド(E2E)テストを自動化する方法を学びます。


ナビゲーションの不具合やクラッシュする画面は、レビュアーがすべてのプルリクエストでアプリを動かせるとは限らないため、コードレビューをすり抜けてしまいがちです。

この章で学べること

  • ナビゲーションと画面の内容をテストする Maestro のフローファイルを書く
  • ワークフロー内で Android と iOS の開発ビルドに対して E2E テストを実行する
  • on.pull_request でプルリクエストのたびに、あるいは on.pull_request_labeled で必要なときだけ E2E テストをトリガーする

E2E テストが役に立つ理由

これまでの章で作ったパイプラインは、プロジェクトをビルドしてアップデートを配信し、Slack で通知します。しかし、ナビゲーションの不具合やクラッシュする画面は、それでも気づかれないまま本番に届いてしまうことがあります。E2E テストは、実際のユーザー操作をシミュレートしてアプリが期待どおりに動くことを検証することで、こうした問題が本番に届く前に見つける助けになります。

Maestro は、Android エミュレーターや iOS シミュレーター上でビルド済みのアプリに対して自動化されたフローを実行します。ボタンをタップし、テキストを入力し、画面の内容を検証し、画面間を移動できます。EAS Workflows は、Android 向けの APK または iOS シミュレーター向けのビルドを作成したあと、これらのフローをクラウド上で実行します。

E2E テストをセットアップする

Android と iOS のどちらについても、E2E テスト用の専用のビルドプロファイルを追加する必要があります。このプロファイルは、Android では認証情報のセットアップを省略し、iOS ではビルドをシミュレーター上で実行できるようにします。

1

e2e-test ビルドプロファイルを追加する

eas.jsone2e-test プロファイルを追加します。このプロファイルは、Android では署名なしの APK を、iOS ではシミュレーター向けのビルドを作成します。

eas.json
{ %%placeholder-start%%... %%placeholder-end%% "build": { "e2e-test": { "withoutCredentials": true, "android": { "buildType": "apk", "image": "latest" }, "ios": { "simulator": true, "image": "latest" } } } }

2

Maestro のフローファイルを追加する

Expo プロジェクトのルートに .maestro/ ディレクトリを作成し、次のテストファイルを追加します。

たとえば次のコードスニペットは、アプリを起動して "Welcome" というテキストが表示されることを確認する、基本的なホーム画面のテストです。appIdcom.yourname.yourapp は、自分のアプリの値に置き換えてください。Android では android.package、iOS では ios.bundleIdentifier で、いずれも app.json に定義されています。

.maestro/home.yml
appId: com.yourname.yourapp # Replace with your app's package name/bundle identifier from app config file --- - launchApp - assertVisible: 'Welcome'

続いて、設定画面用のテストをもう 1 つ追加できます。

.maestro/navigate.yml
appId: com.yourname.yourapp # Replace with your app's package name/bundle identifier from app config file --- - launchApp - tapOn: 'Settings' - assertVisible: 'Settings'

E2E テスト用のワークフローを作成する

1

e2e-tests.yml を作成する

.eas/workflows/ の中に e2e-tests.yml という新しいファイルを追加し、次のコードを記述します。

.eas/workflows/e2e-tests.yml
name: E2E Tests jobs: build_android: name: Build Android for E2E type: build params: platform: android profile: e2e-test build_ios: name: Build iOS for E2E type: build params: platform: ios profile: e2e-test test_android: name: Run Maestro tests (Android) needs: [build_android] type: maestro params: build_id: ${{ needs.build_android.outputs.build_id }} flow_path: ['.maestro/home.yml', '.maestro/navigate.yml'] test_ios: name: Run Maestro tests (iOS) needs: [build_ios] type: maestro params: build_id: ${{ needs.build_ios.outputs.build_id }} flow_path: ['.maestro/home.yml', '.maestro/navigate.yml']

上のワークフローには、Android と iOS 向けの 2 つのビルドジョブ build_androidbuild_ios があります。それぞれのビルドのあとに、対応する Maestro ジョブ(test_android または test_ios)がそのプラットフォーム向けのテストを実行します。

各 Maestro ジョブは、build_id でビルドを参照し、flow_path で Maestro のフローファイルを指定します。

2

ワークフローを手動で実行する

eas workflow:run コマンドを使ってワークフローを手動で実行します。

Terminal
eas workflow:run .eas/workflows/e2e-tests.yml

EAS ダッシュボードでは、Android と iOS のビルドが並列に始まることが分かります。各ビルドが完了すると、対応する Maestro のテストジョブがそのビルドに対してフローファイルを実行します。

E2E テストを自動でトリガーする

ここまでは、ワークフローを手動で実行してきました。GitHub のイベントからトリガーすれば、プルリクエストのたびに実行したり、プルリクエストのラベルで必要なときだけ実行したりできます。

プルリクエストのたびに実行する

プルリクエストのたびに E2E テストを実行するには、ワークフローに on.pull_request トリガーを追加します。

.eas/workflows/e2e-tests.yml
on: pull_request: branches: ['*']

ラベルで必要なときだけ実行する

必要なときだけ E2E テストを実行するには、on.pull_request_labeled トリガーを使います。このトリガーは labels パラメーターを受け取り、そのいずれかのラベルがプルリクエストに追加されたときにだけワークフローが実行されます。たとえば、test ラベルを E2E テストのワークフローのトリガーに使えます。

.eas/workflows/e2e-tests.yml
on: pull_request_labeled: labels: ['test']

まとめ

第 4 章:E2E テスト

Android と iOS の開発ビルドに対する Maestro の E2E テストワークフローを作成し、トリガーはデフォルトで手動のままにしつつ、必要なときだけ実行するためのプルリクエストのラベルトリガーの使い方を学びました。

次の章では、フィンガープリントと OTA アップデートを組み合わせた本番ワークフローを作成する方法を学びます。

次へ:本番デプロイ