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 テストをトリガーする
EAS Workflows の Maestro ジョブタイプは、現時点では alpha です。
E2E テストが役に立つ理由
これまでの章で作ったパイプラインは、プロジェクトをビルドしてアップデートを配信し、Slack で通知します。しかし、ナビゲーションの不具合やクラッシュする画面は、それでも気づかれないまま本番に届いてしまうことがあります。E2E テストは、実際のユーザー操作をシミュレートしてアプリが期待どおりに動くことを検証することで、こうした問題が本番に届く前に見つける助けになります。
Maestro は、Android エミュレーターや iOS シミュレーター上でビルド済みのアプリに対して自動化されたフローを実行します。ボタンをタップし、テキストを入力し、画面の内容を検証し、画面間を移動できます。EAS Workflows は、Android 向けの APK または iOS シミュレーター向けのビルドを作成したあと、これらのフローをクラウド上で実行します。
E2E テストをセットアップする
Android と iOS のどちらについても、E2E テスト用の専用のビルドプロファイルを追加する必要があります。このプロファイルは、Android では認証情報のセットアップを省略し、iOS ではビルドをシミュレーター上で実行できるようにします。
1
e2e-test ビルドプロファイルを追加する
eas.json に e2e-test プロファイルを追加します。このプロファイルは、Android では署名なしの APK を、iOS ではシミュレーター向けのビルドを作成します。
{ %%placeholder-start%%... %%placeholder-end%% "build": { "e2e-test": { "withoutCredentials": true, "android": { "buildType": "apk", "image": "latest" }, "ios": { "simulator": true, "image": "latest" } } } }
2
Maestro のフローファイルを追加する
Expo プロジェクトのルートに .maestro/ ディレクトリを作成し、次のテストファイルを追加します。
たとえば次のコードスニペットは、アプリを起動して "Welcome" というテキストが表示されることを確認する、基本的なホーム画面のテストです。appId の com.yourname.yourapp は、自分のアプリの値に置き換えてください。Android では android.package、iOS では ios.bundleIdentifier で、いずれも app.json に定義されています。
appId: com.yourname.yourapp # Replace with your app's package name/bundle identifier from app config file --- - launchApp - assertVisible: 'Welcome'
続いて、設定画面用のテストをもう 1 つ追加できます。
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 という新しいファイルを追加し、次のコードを記述します。
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_android と build_ios があります。それぞれのビルドのあとに、対応する Maestro ジョブ(test_android または test_ios)がそのプラットフォーム向けのテストを実行します。
各 Maestro ジョブは、build_id でビルドを参照し、flow_path で Maestro のフローファイルを指定します。
2
E2E テストを自動でトリガーする
ここまでは、ワークフローを手動で実行してきました。GitHub のイベントからトリガーすれば、プルリクエストのたびに実行したり、プルリクエストのラベルで必要なときだけ実行したりできます。
プルリクエストのたびに実行する
プルリクエストのたびに E2E テストを実行するには、ワークフローに on.pull_request トリガーを追加します。
on: pull_request: branches: ['*']
ラベルで必要なときだけ実行する
必要なときだけ E2E テストを実行するには、on.pull_request_labeled トリガーを使います。このトリガーは labels パラメーターを受け取り、そのいずれかのラベルがプルリクエストに追加されたときにだけワークフローが実行されます。たとえば、test ラベルを E2E テストのワークフローのトリガーに使えます。
on: pull_request_labeled: labels: ['test']
まとめ
第 4 章:E2E テスト
Android と iOS の開発ビルドに対する Maestro の E2E テストワークフローを作成し、トリガーはデフォルトで手動のままにしつつ、必要なときだけ実行するためのプルリクエストのラベルトリガーの使い方を学びました。
次の章では、フィンガープリントと OTA アップデートを組み合わせた本番ワークフローを作成する方法を学びます。