mobile-testing について
iOS、Android、ハイブリッドアプリ、モバイル Web アプリを検証するチーム向けのモバイルテストスキルです。デバイスのカバレッジ計画に加え、プラットフォーム差、ジェスチャー、通信、権限、中断時の確認方法を扱います。
主な機能
- 01デバイスカバレッジマトリクスの計画
- 02iOS と Android の差異確認
- 03タッチジェスチャーの検証
- 04オフラインと中断のシナリオ
- 05実機とエミュレーターの使い分け指針
活用シーン
- 01モバイルアプリのリリース向けデバイスカバレッジ計画
- 02プラットフォーム固有の操作と権限のテスト
- 03ジェスチャーとオフライン動作の検証
- 04アプリストア申請に向けた準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ proffesor-for-testing/ agentic-qe --skill mobile-testingインストール後、Claude Code で/mobile-testingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/mobile-testing.yamlschemas/output.jsonscripts/validate-config.json詳細
モバイルテスト
<default_to_action> モバイルアプリケーションをテストする際は、次の手順に従います。
- デバイスカバレッジマトリックスを定義します(Tier 1:60%、Tier 2:30%、Tier 3:10%)
- プラットフォームごとの差異をテストします(iOS ≠ Android:戻るボタン、権限、UI)
- タッチジェスチャーを検証します(タップ、スワイプ、ピンチ、長押し)
- モバイル固有のシナリオをテストします(オフライン、低バッテリー、中断)
- クリティカルパスには実機を、迅速なフィードバックにはエミュレーターを使用します
モバイルテストのクイックチェックリスト:
- 最新のiOSとAndroidのフラッグシップデバイスでテストします
- オフラインモードとネットワーク切り替えをテストします
- プッシュ通知が機能することを確認します
- ジェスチャー操作(スワイプ、ピンチ)をテストします
- 権限のフロー(カメラ、位置情報、通知)を確認します
重要な成功要因:
- テストの80%にはエミュレーターを、クリティカルパスの20%には実機を使用します
- ユーザーが実際に使用しているデバイスでテストします(分析データを活用)
- デバイスの断片化は、Androidにとって最大の課題です </default_to_action>
クイックリファレンスカード
使用する場面
- ネイティブアプリ開発(iOS/Android)
- ハイブリッドアプリ(React Native、Flutter)
- モバイルウェブ/PWA
- アプリストアへの申請準備
iOSとAndroidの違い
| 項目 | iOS | Android |
|---|---|---|
| OSバージョン | 2~3種類をサポート | 10種類以上が使用中 |
| デバイス | 約40モデル | 1000以上のバリエーション |
| 戻るボタン | ジェスチャー/ナビゲーション | ハードウェア/ソフトウェア |
| 権限 | 単一のプロンプト | 実行時の詳細な権限 |
| アプリストア | 厳格な審査 | Google Play + サイドロード |
デバイスカバレッジのティア
| ティア | カバレッジ | デバイス |
|---|---|---|
| Tier 1 | ユーザーの60% | iPhone 15、Galaxy S24、iPad |
| Tier 2 | ユーザーの30% | iPhone 14/13、Pixel 8 |
| Tier 3 | ユーザーの10% | 旧型デバイス、その他のメーカー |
モバイル固有のシナリオ
// Offline mode testing
test('app works offline', async () => {
await driver.toggleAirplaneMode();
await driver.findElement('view-saved-items').click();
const items = await driver.findElements('saved-item');
expect(items.length).toBeGreaterThan(0);
const banner = await driver.findElement('offline-banner');
expect(banner.getText()).toContain('No internet');
await driver.toggleAirplaneMode(); // Restore
});
// Location testing
test('location-based features', async () => {
await driver.setGeoLocation({
latitude: 37.7749,
longitude: -122.4194,
altitude: 0
});
const stores = await driver.findElement('stores-list');
expect(stores.getText()).toContain('San Francisco');
});
// Permission testing (Android)
test('camera permission flow', async () => {
await driver.findElement('take-photo').click();
// Handle permission dialog
await driver.findElement(
'com.android.packageinstaller:id/permission_allow_button'
).click();
expect(await driver.findElement('camera-view')).toBeDefined();
});
エージェント主導のモバイルテスト
// Cross-platform mobile testing
await Task("Mobile Test Suite", {
platforms: ['iOS', 'Android'],
deviceTiers: [1, 2],
tests: 'regression-suite',
parallelDevices: 5,
deviceFarm: 'browserstack'
}, "qe-test-executor");
// Device farm integration
await Task("Device Farm Execution", {
service: 'browserstack',
devices: [
'iPhone 15 - iOS 17',
'Samsung Galaxy S24 - Android 14'
],
recordVideo: true,
captureNetworkLogs: true
}, "qe-test-executor");
エージェント連携のヒント
メモリの名前空間
aqe/mobile-testing/
├── device-matrix/* - Device coverage strategy
├── platform-tests/* - iOS/Android specific tests
├── gesture-library/* - Reusable gesture patterns
└── performance/* - Mobile performance metrics
フリート連携
const mobileFleet = await FleetManager.coordinate({
strategy: 'mobile-testing',
agents: [
'qe-test-executor', // Cross-platform execution
'qe-performance-tester', // Mobile performance
'qe-visual-tester' // Screen size validation
],
topology: 'parallel'
});
関連スキル
- アクセシビリティテスト - VoiceOver、TalkBack
- パフォーマンステスト - モバイルのパフォーマンス
- 互換性テスト - デバイスの互換性
忘れずに
クリティカルなフローは実機でテストしてください。 エミュレーターでバグの80%を検出できますが、実際のパフォーマンス、センサーの動作、プラットフォーム固有の挙動を確認するには実機が必要です。
エージェントを使用する場合: qe-test-executor がデバイスファーム全体のテストを統括し、プラットフォーム間の差異を管理して、10台以上のデバイスを並列でテストします。
コメント
Markdown 対応