Appiumを使用したAndroidデバイスのWebテスト安定性
- HTML5 APIs
- UI ライブラリ
- テスト支援
- ドキュメント
- コード品質ツール
- バリデータ
- キー入力支援
- テストダブル
- ハイブリッドアプリケーション
- 継続的インテグレーション
調査目的
Seleniumを利用してWebアプリのブラウザ表示テストを行う際に、Androidデバイス上ではAppiumを利用しテストを実行することができます。Appiumを利用した場合に、テストに要する時間やテスト連続稼働時間の目安などを調査しました。
調査環境
- Windows
- Windows 7 SP1 x64
- Android SDK Platform Tools 23.1 (adb 1.0.32)
- node.js 4.4.0
- Appium 1.5.0/1.5.1
- Selenium Grid 2.53.0
- Pitalium 1.1.0 (Java 1.8.0_77 x64)
- Androidの実機(Android 4.2、4.4、5.1、6.0)
- Android Chrome 47.0/49.0
- Linux
- Ubuntu 15.10 Desktop x64
- Android SDK Platform Tools 23.1 (adb 1.0.32)
- node.js 4.4.2
- Appium 1.5.1
- Selenium Grid 2.53.0
- Pitalium 1.1.0 (Java 1.8.0_77)
- Androidの実機(Android 5.1、6.0)
- Android Chrome 49.0
調査方法
本調査ではPitaliumを使用して以下のコマンドを1デバイス、または複数デバイスに対して繰り返し実行しました。
- WebDriverセッションを生成する
- ページを開く
- スクリーンショットを撮影する
- WebDriverセッションを閉じる
調査結果 (Appim on Windows)
調査結果概要
Appiumを使用したAndroidデバイステストにおいて、以下の問題が発生すること、
また発生する問題に関わらず、同時にテストに使用する台数が多くなるほど反比例的にテストの継続回数が低くなることがわかりました。
- Appiumに関する問題点
- WebDriverセッションの生成が遅い
- Appiumのプロセスが落ちる
- Androidに関する問題点
- Appiumが使用するadbプロセスが反応しなくなる
- adb serverからエラーメッセージが返るようになる
※adbとはAndroid Debug Bridgeのことで、Androidのデバッグをサポートするツールです。
調査結果詳細
調査時の具体的な数値は以下の通りです。
デバイス数と試行可能回数
テストデバイス数 | テスト継続可能回数 | テストの失敗原因 |
---|---|---|
1台 | 112回 | adbコマンドのタイムアウト |
2台 | 55回 | adbコマンドのタイムアウト |
3台 | 34回 | adbサーバーのエラー |
4台 | 23回(1台) 26回(3台) | Appiumのプロセスが落ちる(3台) |
4台 | 24回(3台) 133回(1台) | Appiumのプロセスが落ちる(3台) Hubとの接続エラー(1台) |
5台 | 20回(2台) 55回(3デバイス) | adbコマンドのタイムアウト(2台) adbサーバーのエラー(3台) |
WebDriverセッション生成時間
最小 | 6秒 |
最大 | 134秒 |
平均 | 51.3秒 |
標準偏差 | 38.0 |
Appiumに関する問題点
WebDriverセッションの生成が遅い
WebDriverのセッションを新規作成する時に時間がかかる場合があります。
早いときは10秒程度で接続が完了しますが、1分から2分程度かかる場合があり、手元のデバイスでは平均30~60秒となりました。
Appiumのプロセスが落ちる
Appiumを継続使用していると、 "Error: Android boostrap socket crashed: Error: read ECONNRESET" というエラーメッセージとスタックトレースが出力されてAppiumプロセスが落ちる場合があります。
テストの実行中に突然発生しますが、発生する条件や原因は不明です。
Androidに関する問題点
Appiumが使用するadbプロセスが反応しなくなる
Appiumを継続使用していると、Appiumが使用するadbプロセスが反応しなくなり "Adb command timed out" とAppiumのログに表示されるようになります。
これはWebDriverセッションの生成と破棄を繰り返すことで発生します。同時に起動・使用しているAppiumプロセスの数に関わらず起こり、Appiumプロセスの数が増えるに従って発生するまでの時間が早くなります。また1度発生すると他の全てのAppiumプロセスもadbとの接続がタイムアウトするようになります。
このエラーは "adb kill-server" でadb serverを終了することで解消します。Appiumの再起動が必要になる場合があります。
adb serverからエラーメッセージが返るようになる
Appiumを継続使用していると、adb serverが "daemon not running" "error: could not install *smartsocket* listener" というメッセージを返す様になります。
これはWebDriverセッションの生成と破棄を繰り返すことで発生します。同時に起動・使用しているAppiumプロセスの数に関わらず起こり、Appiumプロセスの数が増えるに従って発生するまでの時間が早くなります。また1度発生するとその後全てのAppiumプロセスでデバイスに接続できなくなります。
このエラーは実行中のadbプロセスを強制終了させることで解消します(kill-serverコマンドは効果がありません)。Appiumの再起動が必要になる場合があります。
調査結果 (Appium on Linux)
調査結果概要
Appiumを使用したAndroidデバイステストにおいて以下の問題が発生することがわかりました。
- Appiumに関する問題点
- Appiumのプロセスが落ちる
調査結果詳細
調査時の具体的な数値は以下の通りです。
デバイス数と試行可能回数
テストデバイス数 | テスト継続可能回数 | テストの失敗原因 |
---|---|---|
3台 | 250回 | (テスト完走) |
3台 | 328回(1台) 1000回(2台) | Appiumのプロセスが落ちる (テスト完走) |
WebDriverセッション生成時間
最小 | 8秒 |
最大 | 80秒 |
平均 | 10.7秒 |
標準偏差 | 2.4 |
Appiumに関する問題点
Appiumのプロセスが落ちる
Appiumを継続使用していると、 "Error: Could not proxy. Proxy error: UiAUtomator shut down unexpectedly" というエラーメッセージとスタックトレースが出力されてAppiumプロセスが落ちる場合があります。
テストの実行中に突然発生しますが、発生する条件や原因は不明です。