testing-mobile-apps について
iOS シミュレーターと Android エミュレーターでモバイルアプリの自動テストを計画・実行するスキルです。一般的な UI フロー、ジェスチャー、プラットフォーム固有の動作を複数のテストフレームワークで扱います。
主な機能
- 01iOS・Android エミュレーターでのテスト
- 02UI フロー、ジェスチャー、画面遷移の確認
- 03プラットフォーム固有の動作を検証
- 04複数のモバイルテストフレームワークに対応
- 05失敗時のスクリーンショットとレポート
活用シーン
- 01端末でのログインと画面遷移の検証
- 02権限、ディープリンク、通知のテスト
- 03アクセシビリティと画面回転の確認
- 04CI 向けのスクリーンショットとレポート収集
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeremylongshore/ tons-of-skills-marketplace --skill testing-mobile-appsインストール後、Claude Code で/testing-mobile-appsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/README.mdreferences/README.mdscripts/README.md詳細
モバイルアプリテスター
概要
iOS シミュレーターと Android エミュレーターで、UI 操作、ナビゲーションフロー、ジェスチャー処理、プラットフォーム固有の動作を対象に、モバイルアプリケーションの自動テストを実行します。Appium、Detox(React Native)、XCUITest(iOS ネイティブ)、Espresso(Android ネイティブ)、Maestro に対応し、クロスプラットフォームのモバイルテストを実行できます。
前提条件
- モバイルテストフレームワークがインストールされていること(Appium、Detox、Maestro、またはネイティブの XCUITest/Espresso)
- Xcode 経由の iOS シミュレーター(macOS のみ)、または Android SDK 経由の Android エミュレーター
- アプリケーションのビルド成果物(
.app、.apk、または.ipa)、またはバンドルされた開発サーバー(React Native) - Appium を使用する場合、Appium ドライバー(Android 用の
uiautomator2、iOS 用のxcuitest)がインストールされていること - JavaScript ベースのテストランナー用の Node.js
手順
- テスト環境を設定します。
- 対象デバイス/シミュレーターを一覧表示します。OS バージョン、画面サイズ、向きを指定します。
- テスト用にアプリケーションをビルドします(
xcodebuild、./gradlew assembleDebug、またはnpx react-native build)。 - エミュレーター/シミュレーターを起動するか、実機を接続します。
- 対象デバイスにアプリをインストールします。
- モバイルの基本操作を対象とするテストケースを作成します。
- タップとナビゲーション:ボタンをタップし、画面間を移動し、戻る操作を検証します。
- テキスト入力:フォームに入力し、キーボードの動作を検証し、自動補完と貼り付けをテストします。
- スクロール:リストをスクロールし、遅延読み込みを検証し、プル・トゥ・リフレッシュをテストします。
- ジェスチャー:スワイプ(カルーセル)、ピンチによるズーム、長押し、ドラッグ&ドロップをテストします。
- システム操作:権限ダイアログ、プッシュ通知、ディープリンクを処理します。
- プラットフォーム固有の動作をテストします。
- iOS:セーフエリアのインセット、ノッチへの対応、Dynamic Type、VoiceOver のアクセシビリティ。
- Android:戻るボタンの動作、マルチウィンドウ、さまざまなナビゲーションパターン、TalkBack。
- 両方:画面の回転(縦向き/横向き)、ダークモード、低バッテリーモード。
- デバイス固有のテスト設定を実装します。
- デバイス/OS の組み合わせごとにケイパビリティセットを定義します。
- テストタグを使用して、特定のプラットフォームでテストの一部を実行します(
@ios、@android)。 - ビジュアルデバッグ用に、失敗時のスクリーンショット取得を設定します。
- 非同期のモバイル動作を処理します。
- アサーションの前にアニメーションが完了するまで待機します。
- 明示的な待機を使用して、ネットワーク読み込み中のスピナーを処理します。
- テストフローを中断するシステムダイアログ(権限、更新)を考慮します。
- テストスイートを実行し、結果を取得します。
- プラットフォームごとにテストを実行します:
npx detox test --configuration ios.sim.debug。 - デバイスログ、スクリーンショット、クラッシュレポートを収集します。
- CI 連携用に JUnit XML または Allure レポートを生成します。
- プラットフォームごとにテストを実行します:
- モバイルテスト用の CI パイプラインを設定します(iOS には GitHub Actions の macOS ランナー、Android には Linux を使用)。
出力
- 機能/フローごとに整理されたモバイルテストファイル(
tests/mobile/またはe2e/) - 対象デバイス/OS の組み合わせごとのデバイス設定プロファイル
- ビジュアル検証と失敗のデバッグ用スクリーンショット
- デバイス固有のメタデータを含む JUnit XML 形式のテスト結果
- モバイルテストを自動実行するための CI パイプライン設定
エラー処理
| エラー | 原因 | 解決策 |
|---|---|---|
| シミュレーター/エミュレーターが起動しない | ディスク容量不足、またはシミュレーターイメージの破損 | 派生データを削除してシミュレーターをリセットします。ディスク割り当てを増やすか、エミュレーターの AVD を再作成します |
| テスト中にアプリが起動時にクラッシュする | 権限が不足している、または OS バージョンに互換性がない | 最小デプロイメントターゲットを確認します。テストのセットアップで必要な権限を付与し、アプリの署名を確認します |
| 要素が見つからない | 要素 ID が変更された、または画面の読み込みが完了していない | XPath ではなくアクセシビリティ ID を使用します。明示的な待機を追加し、操作前に要素が表示されていることを確認します |
| CI ではテストが不安定だが、ローカルでは成功する | CI ランナーの CPU/GPU が低速で、アニメーションやタイミングに影響している | CI の待機タイムアウトを延長します。開発者設定でアニメーションを無効にし、専用の CI ハードウェアを使用します |
| 権限ダイアログがテストを妨げる | アプリの UI の上にシステムアラートが表示された | テストのセットアップでアラートを自動的に閉じます。xcrun simctl または ADB コマンドで事前に権限を付与します |
例
React Native のログインフローをテストする Detox の例:
describe('Login Flow', () => {
beforeAll(async () => { await device.launchApp(); });
beforeEach(async () => { await device.reloadReactNative(); });
it('logs in with valid credentials', async () => {
await element(by.id('email-input')).typeText('[email protected]');
await element(by.id('password-input')).typeText('password123');
await element(by.id('login-button')).tap();
await expect(element(by.id('home-screen'))).toBeVisible();
});
});
Maestro フローファイル:
appId: com.example.myapp
---
- launchApp
- tapOn: "Sign In"
- inputText:
id: "email-input"
text: "[email protected]"
- inputText:
id: "password-input"
text: "password123"
- tapOn: "Submit"
- assertVisible: "Welcome"
リソース
- Appium のドキュメント:https://appium.io/docs/en/latest/
- Detox(React Native):https://wix.github.io/Detox/
- Maestro によるモバイルテスト:https://maestro.mobile.dev/
- XCUITest:
- Espresso(Android):https://developer.android.com/training/testing/espresso
コメント
Markdown 対応