Posted at

並列でAndroidのブラウザテストがしたい(Ruby)

More than 1 year has passed since last update.

この記事はselenium_and_appiumアドベントカレンダー2016の20日目の記事です。


はじめに

TEISHISEIです!語弊を恐れず書きます!お手柔らかにー

上のgifは弊社のSTF環境で実行したAndroid端末のSelenium(Appium,Selendroid)並列実行です。

STFとはリモート(ブラウザ)でAndroidの実機操作を行うツールです。STFの方が気になる方はこちらへ。


Androidで動かしたい

Androidでブラウザテストがしたい場合、かなり複雑ですよね。


  • Android2.3以上ならSelendroid

  • Android4.2以上ならAppium


    • Chromeを使いたいならAndroid4.2以上


      • Chromeをインストールしている

      • Android Chromeのversionは43.0.2357.0以上



    • Browserを使いたいならAndroid4.4以上


      • Browserがインストールされているか(com.android.browserでないといけない。メーカー独自のBrowserだと動かない)





そしてdriverインスタンス作成時のconfigとかがそれ毎に違ってたりして複雑。調べるのも結構大変。

なので並列実行できるRuby用のSelenium(Appium,Selendroid)のラッパーを作りました。

実行できるブラウザとツールを判定して勝手にいろいろ設定してくれます。


インストール

すいません。まだちゃんとテストできてないので公開はしていません。

gitから落として手動でbuildする必要があります。

$ git clone https://github.com/arakawamoriyuki/android_webdriver.git

$ cd android_webdriver
$ gem build android_webdriver.gemspec

そしてGemfileにbuild後にでてきたgemを指定。

gem '/path/to/android_webdriver-x.x.x.gem'


使い方

古いAndroid2.3も実行できるようにselendroid-standalone.jarをダウンロードしてください。

実行できる環境にあるのか、下記で検証できます。

$ bundle exec android_webdriver doctor


シンプルにudidを指定して1端末実行

require 'android_webdriver'

udid = 'xxxxxxxxxxxxx' # udidを調べて設定してください
driver = AndroidWebDriver.for(udid)
driver.navigate.to 'https://www.google.co.jp'
driver.quit


オプションを指定して1端末実行

require 'android_webdriver'

udid = 'xxxxxxxxxxxxx' # udidを調べて設定してください
driver = AndroidWebDriver.for(udid, {

## 実行したいブラウザ名. (Chrome or Browser or Selendroid)
# 指定がなければ自動で選択。
browserName: 'Chrome'

## selendroid-standalone.jarのパスを指定
# selendroid-standalone.jarをダウンロードしてください。デフォルトではfindコマンドを使って、下層ディレクトリから検索したパスを利用します。
# `find . -name 'selendroid-standalone-*.*.*-with-dependencies.jar' -type f`
selendroidPath: './selendroid-standalone-*.*.*-with-dependencies.jar'

## 各ポートを設定します。
# デフォルトで空きポートを調べて設定してくれます。
port: '4444'
bootstrapPort: '4445'
selendroidPort: '4446'
chromedriverPort: '4447'

## ログの吐き出し
logPath: "./log/#{Time.now.strftime('%Y%m%d%H%M%S')}.#{udid}.log"
})
driver.navigate.to 'https://www.google.co.jp'
driver.quit


複数端末を直列で実行

require 'android_webdriver'

udids = [udid,udid,udid...] # udidを調べて設定してください
AndroidWebDriver::MultiDevices.sequential(udids) do |driver|
driver.navigate.to 'https://www.google.co.jp'
driver.quit
end


複数端末を並列で実行

require 'android_webdriver'

udids = [udid,udid,udid...] # udidを調べて設定してください
AndroidWebDriver::MultiDevices.parallel(udids) do |driver|
driver.navigate.to 'https://www.google.co.jp'
driver.quit
end


さいごに

記事作成までに間に合わず、まだバグがあるはずです。。

unix系osだと動くはず(未検証)。

次の記事はtadashi0713さんです。

appiumについて書いてくれるとの事で期待してます!