Android端末上でテストを行う(コマンドライン)
- HTML5 APIs
- UI ライブラリ
- テスト支援
- ドキュメント
- コード品質ツール
- バリデータ
- キー入力支援
- テストダブル
- ハイブリッドアプリケーション
- 継続的インテグレーション
テスト環境
- Windows7 x64
環境構築
JDKのインストール
こちらからインストーラーをダウンロードし、実行します。
本稿では執筆時点での最新版であるJDK 8u77(Windows x64)を利用します。
インストールが完了したらコマンドプロンプトからJavaにPATHが通っているか確認します。
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
またWindowsの環境変数にJavaの設定を行います。
システムの詳細設定を開き、システム環境変数に以下の値を設定します。
変数名 | 値 |
---|---|
JAVA_HOME | C:\Program Files\Java\jdk1.8.0_77 |
Path | ;C:\Program Files\Java\jdk1.8.0_77\bin (既存の値に追記) |
注意:
Javaの実行ファイルのパス指定に%JAVA_HOME%への参照が含まれていると
Appiumのインストールに失敗する場合があります。
Error: Command 'jar tf C:\\Path\to\\appium\\node_modules\\appium-selendroid-driver\\node_modules\\appium-selendr
oid-installer\\selendroid\\download\\selendroid-server.jar' errored out: Error: spawn jar ENOENT
at exports._errnoException (util.js:870:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
at onErrorNT (internal/child_process.js:344:16)
at nextTickCallbackWith2Args (node.js:442:9)
at process._tickCallback (node.js:356:17)
at ChildProcess.<anonymous> (lib/teen_process.js:31:14)
at emitOne (events.js:77:13)
at ChildProcess.emit (events.js:169:7)
at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
at onErrorNT (internal/child_process.js:344:16)
at nextTickCallbackWith2Args (node.js:442:9)
at process._tickCallback (node.js:356:17)
この場合は、環境変数Pathを絶対パスで指定してください。
Node.jsのインストール
こちらからインストーラーをダウンロードし、実行します。
本稿ではLTSの最新版である 4.4.3 を利用します。
インストールが完了したらコマンドプロンプトからNode.jsにPATHが通っているか確認します。
v4.4.3
Gitのインストール
こちらからインストーラーをダウンロードし、実行します。
"Adjusting your PATH environment" という項目では "Use Git from the Windows Command Prompt" を選択します。
インストールが完了したら、GitへPATHが通っているか確認します。
git version 2.8.1.windows.1
Android SDKのインストール
ダウンロードと展開
こちらから android-sdk_rXX-windows.zip をダウンロードします。(2016年4月現在のバージョンは r24.4.1 です)
ダウンロードしたzipファイルを解凍し、適当な位置へ移動します。ここでは C:\opt\android へ移動したこととします。
パッケージのインストール
C:\opt\android\SDK Manager.exe を起動し、以下のパッケージをインストールします。
- Tools
- Android SDK Tools
- Android SDK Platform-tools
- Android SDK Build-tools (番号が最も新しいものを1つ)
- Android 4.4.2 (API 19)
- SDK Platform
- Extras
- Google USB Driver
プロキシの設定
プロキシ環境下ではSDK Managerが通信に失敗し、SDKのインストールができません。
Tools > Options... からプロキシの設定をする必要があります。
PATHの設定
Android SDKを使用するために、SDKへPATHを通します。
システムの詳細設定を開き、システム環境変数に以下の値を設定します。
変数名 | 値 |
---|---|
ANDROID_HOME | C:\opt\android |
Path | ;C:\opt\android\platform-tools (既存の値に追記) |
Appiumのインストール
次のコマンドを実行し、Appiumをインストールします。
>appium -v
1.5.1
プロキシを設定する
プロキシ環境下ではnpmがネットワーク接続ができずAppiumのインストールに失敗します。
下記の様にnpmにプロキシ設定を行います。
なおプロキシのURLを http://proxy.local:9000/ とします。
npm -g config set https-proxy http://proxy.local:9000/
npm -g config set registry http://registry.npmjs.org/
npm -g config set strict-ssl false
またWindowsの環境変数にプロキシの設定を行います。
システムの詳細設定を開き、システム環境変数に以下の値を設定します。
変数名 | 値 |
---|---|
HTTP_PROXY | http://proxy.local:9000/ |
HTTPS_PROXY | http://proxy.local:9000/ |
なお、Selenium Grid と組み合わせてテストを実行する場合、これらの環境変数が原因で
localhostのSelenium Grid Hub に接続できない、または接続できてもテストが動作しないことがあります。
この環境変数はAppiumのインストール時のみ使用しますので、必要がなければその後削除してください。
環境の診断
Appiumをインストールしたら、Appiumが動作できる環境であるかどうかを appium-doctor を利用して診断します。
Android環境の診断には--android、iOS環境の診断には--iosをオプション設定します。
info AppiumDoctor ### Diagnostic starting ###
info AppiumDoctor ✔ ANDROID_HOME is set to: C:\opt\android
info AppiumDoctor ✔ JAVA_HOME is set to: C:\Program Files\Java\jdk1.8.0_77
info AppiumDoctor ✔ adb exists at: C:\opt\android\platform-tools\adb.exe
info AppiumDoctor ✔ android exists at: C:\opt\android\tools\android.bat
info AppiumDoctor ✔ emulator exists at: C:\opt\android\tools\emulator.exe
info AppiumDoctor ### Diagnostic completed, no fix needed. ###
info AppiumDoctor
info AppiumDoctor Everything looks good, bye!
info AppiumDoctor
Android端末の接続
USBデバッグの有効化
Appiumを通じてAndroid端末でテストを実行するには、実行する端末でUSBデバッグを有効にする必要があります。
Android 4.2以降の端末では開発者オプションが非表示にされています。
設定から端末情報を開き、ビルド番号を連打することで表示することができます。
端末の接続と認識
Android端末をPCに接続します。(※USBドライバーを別途インストールする必要がある場合があります。)
コマンドプロンプトから次のコマンドを実行し、端末が認識されていることを確認します。
List of devices attached
<端末のID> device
なおAndroid 4.2以降は初回接続時にデバッグ認証が要求され、「unauthorized」と表示されます。
端末に表示されている認証ダイアログから接続先PCを承認してください。
Appium起動・テスト(Android4.1以前)
nodeConfig.jsonファイルの用意
任意のフォルダに、次のような内容でnodeConfig.json(Selenium GridにAppiumサーバを登録するための設定を記載するファイル)を作成する。
"capabilities": [
{
"platform": "ANDROID",
"browserName": "android",
"version": "2.3.6 Galaxy S2",
"platformName": "Android",
"deviceName": "Galaxy S2",
"platformVersion": "2.3.6",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": 4723,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "localhost"
}
}
●項目の説明
項目名 | 説明 |
---|---|
platform | テストを実行する端末のOS。Android端末でのテストの場合 "ANDROID"。 |
browserName | テスト対象のブラウザ名。 "android" 固定。 |
version | 端末を区別するためのバージョン名。 任意の値だが、AndroidのOSバージョン+デバイス名とすると複数端末でのテスト実行時に区別することが出来る。 |
platformName | テストを実行する端末のOS。 Android, iOS, FirefoxOS。 |
platformVersion | 端末のOSのバージョン。 |
deviceName | 端末の種類。 ex) Xperia Z3, Galaxy S4 |
url | Appiumサーバのアドレス。 |
host | 「url」のホスト部。 |
port | 「url」のポート。 |
hubPort | Hubの起動しているポート。 |
hubHost | Hubの起動しているサーバのホスト。 |
WebViewテスト用アプリのダウンロード
http://search.maven.org/#search|ga|1|selendroid から、android-driver-app.apk をダウンロードし、任意の場所に解凍する。
※ テストライブラリを使用する場合は、mod版をご使用ください ⇒ mod版のダウンロード
Appiumの起動
次のコマンドを実行し、Appiumサーバを起動する。
--selendroid-port 9515 ^
--app C:\Users\user\Documents\selenium\android-driver-app.apk ^
--platform-version 19 ^
--app-pkg io.selendroid.androiddriver ^
--app-activity io.selendroid.androiddriver.WebViewActivity ^
--session-override
●オプションの説明
設定名 | 詳細 |
---|---|
nodeconfig | nodeConfig.jsonファイルへのフルパス。 |
selendroid-port | selendroidと通信するポート。デフォルトは8080のため、他のアプリケーションで使用中の場合は衝突しないよう設定する。 |
app | android-driver-app.apkファイルへのフルパス。 |
platform-version | 利用するAndroid SDKのバージョン。「Android SDKのインストール」でインストールしたものを指定する。 |
app-pkg | アプリのパッケージ名。 Webテスト用のアプリを使用するため、 "io.selendroid.androiddriver" を設定する。 |
app-activity | 起動するアクティビティ名。 Webテスト用のアプリを使用するため、 "io.selendroid.androiddriver.WebViewActivity" を設定する。 |
session-override | テスト実行時に前のテストセッションが残っていても新しいテストを開始するフラグ設定。 |
以上で、AppiumがNodeサーバとして起動し、Selenium Gridに登録される。
テストの実行
次のCapabilityを指定してテストを実行する。
"platform": "ANDROID",
"browserName": "android",
"version": "2.3.6 Galaxy S2",
"model": "SC-03D",
"deviceName": "Galaxy S2",
"platformVersion": "10",
"platformName": "Android",
"automationName": "Selendroid",
"autoWebview": true
}
以下の点に注意すること。
- "platform"、"browserName"、"version" はAppiumを起動するときに設定したnodeConfig.jsonと同一の値を指定する。
- "automationName" には必ず "Selendroid" を指定する。
- "autoWebview" に true を設定する。
テストに失敗する場合
テスト実行に失敗する場合でかつAppiumの実行ログに INSTRUMENTATION_FAILED と表示されていた場合、
以下のファイル、ディレクトリを削除することで解消される場合がある。
- C:\Users\{ユーザー名}\AppData\Local\Temp\selendroid.io.selendroid.androiddriver.apk
- C:\Users\{ユーザー名}\AppData\Local\Temp\io.selendroid.androiddriver
Appium起動・テスト(Android4.2以降)
※現在chromeのみ動作確認済
nodeConfig.jsonファイルの用意
任意のフォルダに、次のような内容でnodeConfig.json(Selenium GridにAppiumサーバを登録するための設定を記載するファイル)を作成する。
"capabilities": [
{
"platform": "ANDROID",
"browserName": "chrome",
"version": "4.4.4 Xperia Z3",
"platformName": "Android",
"platformVersion": "19",
"deviceName": "Xperia Z3",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": 4723,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "localhost"
}
}
●項目の説明
項目名 | 説明 |
---|---|
platform | テストを実行する端末のOS。Android端末でのテストの場合 "ANDROID"。 |
browserName | テスト対象のブラウザ名。 "chrome" 固定。 |
version | 端末を区別するためのバージョン名。 任意の値だが、AndroidのOSバージョン+デバイス名とすると複数端末でのテスト実行時に区別することが出来る。 |
platformName | テストを実行する端末のOS。 Android, iOS, FirefoxOS。 |
platformVersion | 端末のOSのバージョン。 |
deviceName | 端末の種類。 ex) Xperia Z3, Galaxy S4 |
url | Appiumサーバのアドレス。 |
host | 「url」のホスト部。 |
port | 「url」のポート。 |
hubPort | Hubの起動しているポート。 |
hubHost | Hubの起動しているサーバのホスト。 |
Appiumの起動
次のコマンドを実行し、Appiumサーバを起動する。
●オプションの説明
項目名 | 説明 |
---|---|
nodeconfig | nodeConfig.jsonファイルへのフルパス。 |
session-override | テスト実行時に前のテストセッションが残っていても新しいテストを開始するフラグ設定。 |
以上で、AppiumがNodeサーバとして起動し、Selenium Gridに登録される。
テストの実行
次のCapabilityを指定してテストを実行する。
"platform": "ANDROID",
"browserName": "chrome",
"version": "4.4.4 Xperia Z3",
"platformVersion": "19",
"platformName": "Android",
"deviceName": "Xperia Z3"
}
Appiumを利用したテストの並列実行
Appium 1.4以降を利用するとホストとなるWindows PC 1台の上で、複数のAppiumを同時に実行することが出来る。
複数のAppiumインスタンスを同時に起動することで実機、エミュレーター問わず複数のAndroidを同時にテストすることが可能となる。
その際は以下の起動パラメーターを付加してインスタンスを起動する。
パラメーター名 | 説明 |
---|---|
-p | AppiumがSelenium Gridからの通信を受け取るポート番号。 nodeconfig.jsonのurlまたはportで指定したポート番号。 |
-bp | Appiumの実行ポート番号。 |
| DesiredCapabilitiesのデフォルト値。 |
--chromedriver-port | ChromeDriverが利用するポート番号。 Android 4.2以上のデバイスでテストするときに設定する。 |
--selendroid-port | Selendroidが利用するポート番号。 Android 4.1以下のデバイスでテストするときに設定する。 |
※p、bp、chromedriver-port(selendroid-port)の3つはAppiumインスタンス毎に違う値を必ず設定すること。
Android 4.1以前の設定サンプル
nodeconfig_galaxy_s2.json
"capabilities": [
{
"platform": "ANDROID",
"browserName": "android",
"version": "2.3.6 Galaxy S2",
"platformName": "Android",
"platformVersion": 10,
"deviceName": "Galaxy S2",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://127.0.0.1:4492/wd/hub",
"host": "127.0.0.1",
"port": 4492,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1"
}
}
起動コマンド
--app C:\Users\user\selenium\android-driver-app.apk ^
--session-override ^
--selendroid-port 9915 ^
-p 4492 ^
-bp 2251 ^
--default-capabilities "{\"udid\":\"デバイスID\"}"
テスト時に指定するcapabilities
"platform": "ANDROID",
"browserName": "android",
"version": "2.3.6 Galaxy S2",
"model": "SC-03D",
"deviceName": "Galaxy S2",
"platformVersion": "10",
"platformName": "Android",
"automationName": "Selendroid",
"autoWebview": true
}
Android 4.2以降の設定サンプル
nodeconfig_nexus_5.json
"capabilities": [
{
"platform": "ANDROID",
"browserName": "chrome",
"version": "5.1 Nexus5",
"platformName": "Android",
"platformVersion": "5.1",
"deviceName": "Nexus5",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"configuration": {
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": 4723,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "127.0.0.1"
}
}
起動コマンド
--session-override ^
--chromedriver-port 9916 ^
-p 4493 ^
-bp 2252 ^
--default-capabilities "{\"udid\":\"デバイスID\"}"
テスト時に指定するcapabilities
"platform": "ANDROID",
"browserName": "chrome",
"version": "5.1 Nexus 5",
"deviceName": "Nexus 5",
"platformVersion": "22",
"platformName": "Android"
}