qe-mobile-testing について
qe-mobile-testingは、ネイティブ、ハイブリッド、モバイルWebアプリの検証に使うテストスキルです。デバイス構成、プラットフォーム差、ジェスチャー、オフライン動作などを扱います。
主な機能
- 01デバイスカバレッジの計画
- 02iOSとAndroidの差異確認
- 03タッチジェスチャーの検証
- 04オフラインや割り込みのシナリオ
- 05エミュレーターと実機の使い分け指針
活用シーン
- 01クロスプラットフォーム回帰テストの計画
- 02権限フローとプッシュ通知の確認
- 03オフライン動作とネットワーク切り替えの検証
- 04アプリストア申請の準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ proffesor-for-testing/ agentic-qe --skill qe-mobile-testingインストール後、Claude Code で/qe-mobile-testingを入力して読み込まれたか確認します。
詳細
モバイルテスト
<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 | カバレッジ | デバイス |
|---|---|---|
| Tier 1 | ユーザーの60% | iPhone 15、Galaxy S24、iPad |
| Tier 2 | ユーザーの30% | iPhone 14/13、Pixel 8 |
| Tier 3 | ユーザーの10% | 旧型デバイス、その他のメーカー |
モバイルパフォーマンスの目標
| 指標 | 目標 |
|---|---|
| アプリの起動 | < 2秒 |
| 画面遷移 | < 300ms |
| フレームレート | 60 FPS |
| バッテリー消費 | バックグラウンドで1時間あたり< 5% |
タッチジェスチャーのテスト
// Appium gesture examples
// Tap
await driver.touchAction({ action: 'tap', x: 100, y: 200 });
// Swipe (scroll down)
await driver.touchAction([
{ action: 'press', x: 200, y: 400 },
{ action: 'moveTo', x: 200, y: 100 },
{ action: 'release' }
]);
// Pinch to zoom
const finger1 = [
{ action: 'press', x: 100, y: 200 },
{ action: 'moveTo', x: 50, y: 150 },
{ action: 'release' }
];
const finger2 = [
{ action: 'press', x: 200, y: 200 },
{ action: 'moveTo', x: 250, y: 250 },
{ action: 'release' }
];
await driver.multiTouchAction([finger1, finger2]);
// Long press
await driver.touchAction({
action: 'longPress',
x: 100, y: 200,
duration: 2000
});
モバイル特有のシナリオ
// 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
- パフォーマンステスト - モバイルパフォーマンス
- 互換性テスト - デバイスの互換性
覚えておくこと
モバイルは小型のデスクトップではなく、別のプラットフォームです。 ウェブトラフィックの60%以上はモバイルです。デバイスの断片化(Androidデバイスは1000種類以上)、タッチジェスチャー、センサー、権限、オフラインのシナリオなどには、すべて専用のテストが必要です。
重要なフローは実機でテストします。 エミュレーターでバグの80%は検出できますが、実際のパフォーマンス、センサーの動作、プラットフォーム固有の挙動を確認するには実機が必要です。
エージェントを活用する場合: qe-test-executorがデバイスファーム全体のテストを統括し、プラットフォーム間の違いを管理して、10台以上のデバイスで並行してテストします。モバイルテストを数日から数時間に短縮します。
コメント
Markdown 対応