AppiumをAndroidエミュレータで使う

Androidアプリのappiumによるテスト自体も、iOS版とほとんどシナリオの記述には変化ありません。
一方、Android 4.2 以上が必要である、という要求がありますので、そこは注意が必要です。

iOS版との差分に焦点をあてて、以下の流れで実行までの記述を行います。

  1. シナリオの変更
  2. エミュレータの確認
  3. サンプルシナリオを実行

シナリオの変更

次回、簡単なシナリオを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との差分は以下です。

  1. Androidをdeviceの対象にする
  2. エミュレータのバージョンを指定する
  3. 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と変わらず、

  1. appiumを起動
$ appium -a localhost --avd test
  1. シナリオを実行
$ rspec 実行したいシナリオまでのパス

ここで、iOSシミュレータが起動していたのが、AndroidエミュレータになっていればOKです。

一方、RSpecだと、Androidエミュレータの起動が遅いとNet::HTTPを使っている場合はHTTP timeoutになるため、シナリオにおいてクライアント側インスタンスを作るときにそのHTTP timeoutをのばす指定が必要です。

それはまた次回ということで。

 

更新:20131220

Appium 0.12.3で実行してみますと、うまくAVDが起動しませんでした。。。

ひとまず、-dp [avdの待ち受けポート]のポート指定を行ってappiumを起動するとうまく起動しました。

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s