Vagrant環境下におけるブラウザテストについて(Androidエミュレータ編)
最初にご紹介したGoogle Chrome編、前回のiOSシミュレータ編に続き、今回はAndroidでのテスト方法を紹介します。Androidの場合エミュレータ上でテストするので、ネットワーク周りも含めて母艦とは別なものとして考えることができます。
Androidの場合、エミュレータの速度が最大の問題になります。そこでIntel HAXM(Intel® Hardware Accelerated Execution Manager)をインストールしてエミュレータを高速化するところからはじめます。
HAXMをインストール
まず最初にEclipseのAndroid SDK Managerを起動します。今回の手順はMac OSXで行っていますが、Windowsでもほぼ同じ方法になります。Extras以下にある Intel x86 Emulator Accelerator (HAXM) をインストールします。

この段階ではインストーラーのダウンロードまでになります。インストーラーは Intel x86 Emulator Accelerator (HAXM) をマウスオーバーするとパスが表示されます。

今回の場合は ~/android-sdks/extras/intel/Hardware_Accelerated_Execution_Manager/
になります。開くとDMGファイルがありますので(Windowsの場合は実行ファイル)開きます。

イメージファイルの中にインストールファイルがありますので起動します。

インストーラーはウィザード方式になっていますので順番に手順を進めて完了してください。

これでインストールは完了です。
イメージファイルをインストール
ADVの作成に際して専用のイメージファイルが必要になります。Android SDK Managerを起動して、必要なAndroid APIバージョンの Intel x86 Atom System Imageをインストールしてください。

AVDの作成
イメージファイルをインストールしたら、Android Virtual Deviceを起動します。

そしてCPI/ABIの選択においてIntel Atom (x86)を選択してください。

後は Emulator OptionsでUse Host GPUをチェックします。

これで準備は完了です。
selendroidを起動する
Androidのテストには selendroid を使います。執筆時の最新バージョンは 0.12.0 で、こちらのリンクでダウンロードできます。
テストを実行する
selendroidは最初にエミュレータに接続するようなので、エミュレータはあらかじめ起動しておいてください。HAXMを使っていれば、10秒くらいで起動するはずです。

次のコマンドでselendroidを起動します。
$ java -jar selendroid-standalone-0.12.0-with-dependencies.jar
なおANDROID_HOMEが設定されていないとエラーになりますので必要があれば下記コマンドで設定してください。Windowsの場合はシステムのプロパティで設定してください。
export ANDROID_HOME=~/android-sdks/
デフォルトで 4444番ポートで待機状態になります。
Selenium Serverへの設定
後はSelenium Serverの設定になります。Rubyの場合、次のような設定になります。
Capybara.register_driver :android do |app| Capybara.app_host = "http://192.168.100.100:3000" Capybara::Selenium::Driver.new app, browser: :remote, url: "http://192.168.100.100:4444/wd/hub", desired_capabilities: { browserName: 'android', emulator: true, platformVersion: '19', platform: 'Mac', version: '2.3', deviceOrientation: 'landscape' } end
シミュレータの場合、app_hostはlocalhostになりますが、エミュレータの場合はネットワークが別ですのでIPアドレスで指定する必要があります。ただしこの設定がうまくいっていればPC内部以外、ステージング環境などもURLを変えるだけでテストできるようになります。
テストを実行すると、まず専用のWebブラウザアプリがインストールされます。

そしてテストはそのブラウザを使って行われます。

$ DRIVER=android ruby -S rspec spec/features/hello_spec.rb . Finished in 18.07 seconds 1 example, 0 failures Randomized with seed 32027
設定を多少変更すれば実機テストも行えるはずです。
Androidを使ったテストではエミュレータであるという点が異なります。そのためSeleniumへ別なPCからアクセスできるようにしたり、localhost以外のIPアドレスを指定してWebアプリケーションのテストが行えるようにしなければなりません。テスト環境がAndroidか否かを判別して設定を変更するといった手法が必要です。
コメントは受け付けていません。