Androidアプリのappiumによるテスト自体も、iOS版とほとんどシナリオの記述には変化ありません。
一方、Android 4.2 以上が必要である、という要求がありますので、そこは注意が必要です。
iOS版との差分に焦点をあてて、以下の流れで実行までの記述を行います。
- シナリオの変更
- エミュレータの確認
- サンプルシナリオを実行
シナリオの変更
次回、簡単なシナリオをRSpecを使い書いてようと思いますので、今回は少しRSpecを
使った記載をしてみます。
Andoidは、生成されるapkファイルをそのまま指定することができます。
iOSではアプリ起動のための以下をシナリオにて指定しました。
capabilities = {
'browserName' => '',
'device' => 'iPhone',
'version' => '6.1',
'app' => '起動アプリのパス',
'name' => 'Ruby Example for Appium'
}
Androidでは例えば以下のような要素を与えることが必要です。
capabilities = {
'browserName' => '',
'device' => 'Android',
'version' => '4.2',
'app' => '起動アプリのパス',
'app-package' => 'パッケージ名'
'acc-activity' => '始めに起動させるアクティビティ'
'name' => 'Ruby Example for Appium with Android app'
}
パッケージ名とアクティビティに関しては、Androidのmanifestファイルに記載があると思うので、そちらを参考にしてください。
例:Appliumに同梱されている他の例を参考にしますと以下のようにpackageとactivityの指定がされます。
※以下はPythonです
desired_caps = {}
desired_caps['device'] = 'Android'
desired_caps['browserName'] = ''
desired_caps['version'] = '4.2'
desired_caps['app'] = 'http://appium.s3.amazonaws.com/NotesList.apk'
desired_caps['app-package'] = 'com.example.android.notepad'
desired_caps['app-activity'] = '.NotesList'
この起動時に与える引数におけるiOSとの差分は以下です。
- Androidをdeviceの対象にする
- エミュレータのバージョンを指定する
- apk、パッケージ名、アクティビティを指定する
エミュレータの確認
Android開発者であれば、Android SDKを開発環境のどこかのパスにダウンロードしていると思います。
Appiumでemulatorを起動させる場合、その中のemulatorコマンドまでパスが通っている必要がります。
なので、例えば ~/.bashrc や ~/.bash_profile に以下のようにexport文をあらかじめ書いておきましょう。
export PATH=/Applications/android-sdk-macosx/tools/:${PATH}
また、エミュレータのインスタンスを作成しておく必要があります。
$ android avd
にてAndroid Virtual Device Managerを開き、起動させたいターゲットのバージョンのターゲットがあることを確認します。
ここで、たとえばtestという名のターゲット名があったとすると、以下により起動することができます。
$ emulator -avd test
ここまでできれば、エミュレータの確認完了です。
サンプルシナリオを実行
実行自体はiOSと変わらず、
- appiumを起動
$ appium -a localhost --avd test
- シナリオを実行
$ rspec 実行したいシナリオまでのパス
ここで、iOSシミュレータが起動していたのが、AndroidエミュレータになっていればOKです。
一方、RSpecだと、Androidエミュレータの起動が遅いとNet::HTTPを使っている場合はHTTP timeoutになるため、シナリオにおいてクライアント側インスタンスを作るときにそのHTTP timeoutをのばす指定が必要です。
それはまた次回ということで。
更新:20131220
Appium 0.12.3で実行してみますと、うまくAVDが起動しませんでした。。。
ひとまず、-dp [avdの待ち受けポート]のポート指定を行ってappiumを起動するとうまく起動しました。