野次馬エンジニア道

野次馬な気持ちでプログラミングをあれこれと綴ります

モバイルWebアプリのテスト自動化 (1) - Appium

AndroidiOSに対応したオープンソースのテスト自動化フレームワーク

Appium: Mobile App Automation Made Awesome.

を試してみた。Appiumの特徴は

  • アプリのリビルドが不要
  • Webアプリとネイティブとを混ぜたハイブリッドアプリに対応
  • 様々なプログラム言語のバインディングもあり

インストール自体は、

npm install -g appium
npm install wd  # get appium client

だけだが、試行錯誤した箇所も多数あったので早速メモ。 今回はiOSSafari上でのテストを試してみる。

環境のセットアップ

シミュレーターの利用の許可

sudo authorize_ios #Appliumをインストールすると実行可能

ideviceinstallerのインストール

brew install ideviceinstaller

端末側の設定

ios-webkit-debug-proxyのビルド

brewでインストールされるバージョンでは、

Unknown app_id PID:721
Invalid message _rpc_applicationSentListing: 

というエラーとなり正しくテストが実行されない。途方に暮れていたところ

appium/ios-webkit-debug-proxy.md at master · appium/appium · GitHub

下記の記述があるのを発見。

NOTE: As of April 2, 2015, the primary ios-webkit-debug-proxy repository has not been updated for some time. We currently recommend using James Chuong's fork. To do so, you'll need to build from source. If you're unfamiliar with building with GMake, try following the steps below.

なので、このフォークリポジトリから取得してビルド。

git clone git@github.com:jchuong/ios-webkit-debug-proxy.git
cd ios-webkit-debug-proxy.git
./autogen.sh
./configure           # for debug symbols, append 'CFLAGS=-g -O0'
make
sudo make install

SafariLauncher Appのビルド

Gitから直接取得してビルドする

$ git clone https://github.com/appium/appium.git
$ cd appium
./reset.sh --ios --real-safari --code-sign <code signing idendity> --profile <retrieved profile identity code>

SafariLauncherのビルドに関しては下記の記事が参考になる

自分の環境では/appium/submodules/SafariLauncher/SafariLauncher.xcodeprojが見つからず、代わりに./appium/node_modules/safari-launcher/の下にXcodeのプロジェクトファイルが見つかったので開いて設定してビルドした。

info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: ENOENT, stat '/usr/local/lib/node_modules/appium/build/SafariLauncher/SafariLauncher.zip')","errno":34,"code":"ENOENT","path":"/usr/local/lib/node_modules/appium/build/SafariLauncher/SafariLauncher.zip","origValue":"ENOENT, stat '/usr/local/lib/node_modules/appium/build/SafariLauncher/SafariLauncher.zip'"},"sessionId":null}

のようなエラーになる場合は、以下のどちらか

  • 自分でビルドしたSafariLauncher.zipをコピーする
  • node bin/appium -U (UDID)で起動

環境のチェック

$ appium-doctor --ios

サンプルコードの実行 (実機)

コードの入手

先ほどcloneしたAppiumのappium/submodules/sample-code/sample-code/examplesにサンプルがあるのでclone。今回はJavaScriptで実行したいのでnodeのディレクトリに行ってインストール。

npm install -g -f mocha
npm install

サーバーの起動*2

UDIDの指定が必要 *3

ios_webkit_debug_proxy -c (UDID):27753 
appium -U (UDID)

実行

mocha ios-safari.js

シミュレーターの場合は、ios_webkit_debug_proxyとUDIDの指定は不要 *4

*1:https://discuss.appium.io/t/ios-8-1-real-devices-you-need-to-enable-ui-automation-setting/1271

*2:停止 - killall -9 node

*3:Xcode6からは xcrun simctl list devices が使える

*4:手元の環境がiOS8.2だったので examples/node/helpers/caps.js の少し修正が必要だった