AWS Device Farm で自動化するモバイルアプリテスト - 実機テストと CI/CD 統合

iOS・Android の実機でテストを自動実行し、CI/CD パイプラインに統合する。テストフレームワークの選定基準とリモートアクセスによる手動テストも紹介します。

Device Farm の概要とモバイルテストの課題

モバイルアプリケーションの品質保証は、デバイスの多様性が最大の課題です。Android と iOS の異なる OS バージョン、画面サイズ、ハードウェア仕様の組み合わせは数千パターンに及び、すべてを手動でテストすることは現実的ではありません。オンプレミスでデバイスラボを構築する場合、デバイスの購入・管理、OS アップデートの適用、ネットワーク環境の整備に多大なコストがかかります。Device Farm は AWS がホストする実機デバイスでモバイルアプリケーションと Web アプリケーションをテストするサービスです。Samsung Galaxy、Google Pixel、iPhone、iPad など 2,500 種類以上のデバイス構成が利用可能で、OS バージョンも複数世代をカバーしています。テストは自動テスト (テストスクリプトの実行) とリモートアクセス (実機の手動操作) の 2 つのモードを提供し、開発チームはテストの設計と品質改善に集中できます。

テストフレームワークとデバイスプール管理

Device Farm は Appium (Java、Python、Node.js、Ruby)、Espresso (Android)、XCTest / XCUITest (iOS)、Calabash に対応しています。クロスプラットフォームのテストには Appium が最適で、同一のテストコードで iOS と Android の両方をテストできます。ビルトインテストスイートはテストコードの記述なしで基本的なテストを実行します。Fuzz テストはランダムなユーザー操作を生成してクラッシュを検出し、Explorer テストはアプリの画面を自動的に探索してスクリーンショットを取得します。デバイスプールは、テスト対象のデバイスをグループ化する仕組みで、OS バージョン、画面サイズ、メーカーなどの条件でフィルタリングできます。トップデバイスプール機能は市場シェアの高いデバイスを自動的に選定します。テスト結果にはログ、スクリーンショット、動画、パフォーマンスデータ (CPU、メモリ、ネットワーク) が含まれ、問題の再現と原因特定に活用できます。以下は AWS CLI でテスト実行をスケジュールする例です。 ```bash aws devicefarm schedule-run \ --project-arn arn:aws:devicefarm:us-west-2:123456789012:project:EXAMPLE \ --app-arn arn:aws:devicefarm:us-west-2:123456789012:upload:EXAMPLE \ --device-pool-arn arn:aws:devicefarm:us-west-2:123456789012:devicepool:EXAMPLE \ --test type=APPIUM_JAVA_JUNIT,testPackageArn=arn:aws:devicefarm:... ```

CI/CD パイプラインへの統合

CodePipeline のテストステージに Device Farm アクションを追加することで、ビルド後に自動的にデバイステストを実行できます。テスト失敗時にパイプラインが停止し、不具合のあるビルドが本番にデプロイされることを防止します。Jenkins や GitHub Actions からも AWS CLI または SDK 経由で Device Farm のテストランを作成できます。Amplify のビルドパイプラインにテストフェーズを追加し、ビルド成功後に自動的に Device Farm でのテストを実行する構成も可能です。全デバイスでテストすると時間とコストがかかるため、市場シェアの高いデバイスを優先的に選定し、リリース前のフルテストと日次のスモークテストで対象デバイス数を使い分ける戦略が有効です。リモートアクセス機能を使えば、クラウド上の実機デバイスにリアルタイムで接続し、手動での探索的テストやデバッグを実行できます。 Device Farm について体系的に学びたい方は、関連書籍 (Amazon)も参考になります。

パフォーマンステストとネットワークシミュレーション

Device Farm はアプリケーションのパフォーマンスメトリクスを自動的に収集します。CPU 使用率、メモリ使用量、ネットワークトラフィック、バッテリー消費量などのメトリクスをデバイスごとに記録し、パフォーマンスのボトルネックを特定できます。ネットワークシミュレーション機能により、3G、4G、Wi-Fi、低帯域幅、高レイテンシなど様々なネットワーク条件下でのアプリケーション動作をテストできます。新興国市場向けのアプリケーションでは、低速ネットワーク環境での動作検証が品質保証に不可欠です。GPS シミュレーション機能は、位置情報を使用するアプリケーションのテストに活用でき、世界中の任意の座標でのテストが可能です。

テスト結果の管理と品質モニタリング

テスト実行中のスクリーンショット、ビデオ録画、ログ出力は自動的に S3 に保存され、長期的な品質データの蓄積と分析に活用できます。CloudWatch メトリクスとの連携で、テスト実行の成功率やデバイスごとの障害率をダッシュボードで可視化し、品質の継続的なモニタリングを実現できます。テスト結果は CodePipeline のコンソールから直接確認でき、失敗したテストケースの詳細、スクリーンショット、デバイスログにアクセスできます。数百種類の実機デバイスでの並列テスト実行により、手動テストでは数週間かかるデバイス互換性検証を数時間に短縮できます。

Device Farm の料金

Device Farm は 2 つの料金モデルを提供しています。従量課金はデバイス 1 台あたり 1 分約 0.17 ドルで、テスト時間に応じた課金です。定額プランは月額 250 ドルで、1 つのデバイスを無制限に使用できます。複数デバイスの定額プランも用意されています。CI/CD パイプラインで毎日テストを実行する場合、月間のテスト時間が約 25 時間を超えると定額プランの方が安価になります。リモートアクセス (手動テスト) は 1 分あたり約 0.17 ドルです。最初の 1,000 デバイス分は無料トライアルに含まれます。オンプレミスのデバイスラボ構築には数百万円規模の初期投資が必要ですが、Device Farm は初期費用ゼロでテスト基盤を構築できます。

まとめ

Device Farm は実機デバイスでのモバイルアプリテストを自動化するサービスです。数百種類のデバイスを購入・管理することなく、主要なテストフレームワークで自動テストを実行できます。CI/CD パイプラインに統合することで、デバイス固有の不具合を早期に検出し、品質の高いモバイルアプリケーションをリリースできます。パフォーマンスメトリクスの自動収集とネットワークシミュレーションにより、ユーザーが実際に体験する環境に近い条件でのテストが可能になり、リリース後の不具合を大幅に削減できます。