iOS テストにおける問題点のトラブルシューティング
iOSデバイスを使ったテスト自動化には、いくつかの特有な課題があります。 以下は、iOSデバイスと端末の設定により、そのテストでの問題を回避するためのヒントと手順です。
モバイルデバイスオートメーションの概要
Eggplant Functionalを使ったiOSデバイスの自動制御の多くは、他のタイプのSUT(System Under Test)と同じように行われます。 しかし、いくつかの制御オプションは、モバイル環境、特にiOSに特有のものです。
Eggplant Functionalのスクリプトからモバイルデバイスを自動化する方法については、以下のリソースを参照してください:
CPU使用率の増加
iOSデバイスの自動化のための処理は、iOSデバイス上ではなく、iOS Gatewayを実行しているコンピュータ上で行われるため、iOSデバイスの自動化中にCPU使用率の増加が予想されます。
CPU使用量を減らす最も簡便な方法は、テストが終わったら
自動化を止めることです。
テスト中の
CPU使用率を下げるには:
- iOS GatewayのメインインターフェイスにあるMax Frames Per Secondダイアログボックスを使用して、フレームレートを下げます。
- iOS Gatewayのメインインターフェイスにあるチェックボックスを使って、Faster Screen Updatesを有効にします。
アプリの状態
iOSアプリを扱うとき、そのアプリの状態を知っておくと便利です。 ここでは、3つのiOSアプリの状態を扱います:「Frontmost」「Suspended」「Terminated」です。
Frontmost:最前面アプリは、現在ご覧いただいているアプリです。 iOS 9以降でマルチタスクしている場合、左側のアプリだけが最前面になります。 右側のアプリは待機中とされています。
Suspended:最後に終了したとき(または最後にデバイスを再起動したとき)から最前面にあるアプリで、現在終了していないものを指します。
Terminated:終了したアプリとは、メモリから完全にアンロードされたアプリのことです。 これは、次のような状況で起こります:
- iOS GatewayまたはEggplant Functionalを経由してアプリを正常に終了させることができます。
- アプリが意図せずダウンしたとき。
- 「Recent Apps list」一覧からアプリを終了したとき。
複数のXcodeバージョン
iOS Gatewayが動作するマシンには、Appleの統合開発環境(IDE)であるXcodeをインストールする必要があります。 通常、iOSの新バージョンが出ると、AppleはXcodeの新バージョンもリリースします。 iOSのすべてのバージョンが、Xcodeのすべてのバージョンと互換性があるわけではありません。
Xcodeは、Macに複数のバージョンをインストールすることができますが、ある時点でActive
にできるのは1つのバージョンだけです。 Xcodeのアクティブなバージョンが、テストしたいデバイス上のiOSのバージョンで動作するかどうかを確認する最も簡単な方法は、 iOS Gateway Diagnticsを使用することです。
アクティブなXcodeのバージョンを変更するには、以下の手順を実行します:
- Xcodeを開きます。
- Xcode > Preferences > Locationsに進みます。
- Command Line Toolsのドロップダウンメニューから、アクティブにしたいXcodeのバージョンを選択します。
- 必要に応じて管理者パスワードを入力します。
- Xcodeを閉じます。
アクティブなXcodeバージョンを切り替えるためには、Macに管理者権限が必要です。
アプリを終了する
Eggplant FunctionalのKillAppコマンドを使用することができます。 このコマンドの詳細については、KillApp Commandを参照してください。
どのiOSバージョンでも、開発者署名のあるアプリを強制終了させることができます。
iOS専用コマンド
ホームボタンのダブルプレス
iOS 9以降の端末では、ホームボタンをダブルクリックすることで、最近使ったアプリのリストにアクセスできます。 Eggplant Functionalでは、TypeText
コマンドを使用して、以下のコードでSUT内の動作を自動化することができます:
TypeText homeButton, homeButton
このコマンドは1行で入力する必要があります。 2つの行に分割した場合、デバイスはホームボタンを2回押したと認識し、ダブルプレスとは認識しません。
テストの妨げになるiOSの機能を無効にする
Eggplant FunctionalでiOSデバイスのテストを成功させるためには、それらのデバイスを適切に設定する必要があります。 テストの中断を防ぐために、iOSの特定の機能を無効にする必要があります。 以下に、テストの妨げとなるiOSの機能を無効にする手順を示します。
アップデートとポップアップ
iOS 8以降の自動ソフトウェアアップデート通知やポップアップにより、テストが中断されることがあります。 iOSをアップデートしたくない場合、またはアップデート通知が発生しないようにしたい場合は、以下の方法をお試しください:
- ルーターで
appldnld.apple.com
とmesu.apple.com
をブロックしてください。 アップデートしたくないiOSテストデバイスを大量に保持している場合、それらのデバイスをiOSアップデートを受けるべき他のデバイスとは別のWi-Fiネットワークに置くことを検討してください。 - iOSデバイスにすでにダウンロードされている既存のOTA(Over-The-Air)アップデートを削除する:
- iOSデバイスのSettings > General > Storage & iCloud usageを開きます。
- ストレージの下にある [Manage Storage]を タップします。
- リストからiOSのダウンロードを検索して選択します。
- Delete Update をタップし、削除することを確認します。
iOSデバイスにポップアップ通知が表示されている場合は、iOS Gatewayの自動化を開始できませんのでご注意ください。
スクリーンエフェクト
iOS 9以降では、端末を物理的に動かすとユーザーインターフェイスのアイコンが移動します。 この動きは、テストでの画像のマッチングに問題が生じる可能性があります。 アイコンのモーションエフェクトは、Settings で無効にすることができます。 General > Accessibility > Reduce Motion を On にする。
文字修正
iOSデバイスでテキストを入力する場合、通常、オートコレクト候補がデフォルトで受け入れられ、テキストが正しく表示されないことがあります。 この問題は、テストデバイスの自動キーボードオプションを無効にすることで回避することができます。
iOSのSettingsアプリで、General 、Keyboard の順に選択します。 Auto-Capitalization、Auto-Correction、Predictiveなど、文章の表示に悪影響を与える設定をオフにする。
特別な指示
ファイル転送コマンド
iOS Gatewayを使用してファイルを転送する場合、ファイルは実際のiOSデバイスに転送されるのではなく、iOS Gatewayが動作しているマシンとの間で転送されます。
アプリのスワッピング
Eggplantでは、ホームボタンを押してホーム画面を移動するのではなく、Eggplant FunctionalのLaunchApp
コマンドを使ってアプリを入れ替えることを推奨しています。 これにはいくつかの理由があります:
- 特にホーム画面は "アクティブ "なので、イメージマッチングがしにくく、遅くなります。
- Appleはアプリの配置を管理するための高度なルールを設けているため(特にアプリのアンインストールやインストール時)、アプリがどこにインストールされるかを知ることは難しいかもしれません。
LaunchApp
は、より速く、より保守的に、そしてよりエラーを少なくすることができます。 - AppleのXCTestフレームワークには、ホームボタンを複数回押した後に失敗するバグがあることが知られています。 それを回避するために、iOS Gatewayはホームボタンが150回押されるごとに自動化を再起動します。 そのため、ユーザースクリプトの耐性を低下させる可能性があります。
LaunchApp
を使用すると、Appleのバグを完全に回避することができます。