Classi Advent Calendar 2016 - Qiita 10日目です。
Classi ネイティブアプリ担当の @kitaharamikiya です。
今回は、Appiumを使ってみた話を書きます。
1. Appiumとは
Appiumはネイティブ、 ハイブリッド型モバイルアプリのために開発された
オープンソースのテスト自動化フレームワークです
公式サイトから引用させていただきました。
selenium
のMobile用に拡張したということで、Seleniumを使ったことがあれば
比較的簡単に書けるかと思います。
2. 必要になった経緯
iOSアプリ申請後リジェクトされてしまいました。。。
理由が大変お恥ずかしいのですが、
「iOSアプリ申請に使用しているアカウントでログインできないからレビューできねーよ」
的なことを言われました。
Apple様に多大なるご面倒をおかけしましたし、
審査待ちの3日間を無駄にしてしまいました。
ログイン部分は、Webviewを使用していて、そこで認証が通ればログインができるのですが、
Webviewとロジックの部分で連携ができていませんでした。。。
もちろん動作確認もしてはいますが、
Classi アプリはログインが2種類あり、もう一方のログインを試していませんでした。。。
なかなかテストに割く時間がなかったのですが、
こんな恥ずかしくてしょーもない理由でリジェクトされるのは懲り懲りなので、
テストを書くことにしました。
3. インストールしてみる
とりあえずローカルにインストールしてみます。
3-1 事前準備
3-1 Java をインストールします
3-2 Android SDKをインストールします
3-3 Xcodeをインストールします。
3-4 Homebrewをインストールします (Mac)
3-5 Node.jsをインストールします。
$ brew install node
3-2 Appium をインストールします
-
Windows
-
公式サイトからダウンロードできるようです(未検証です)
-
Mac
-
公式サイトからダウンロード
- 公式サイトからダウンロードできるようです(未検証です)
-
ターミナルでの方法 (今回はこちらでやりました)
- Appium ダウンロード
※ sudo は使わないとのこと(実行時、ユーザー権限まわりでエラーになるそう、、)
$ npm install -g appium # appium をインストール $ npm install -g wd # appium clientをインストール $ npm install -g appium-doctor # appium 診断ツールをインストール
- appium-doctor
- 出現したエラーを解消する
-
xcode-select --install
:Xcode Command Line Toolsをインストール -
brew install carthage
:carthage をインストール -
JAVA_HOME
とANDROID_HOME
を.bash_profileに記載 (PATH通しているだけではだめなんですね。。)
※JAVA_HOME
が読み込まれないのは、jenv
の影響でした。。
-
- 出現したエラーを解消する
- Appium ダウンロード
-
起動と終了コマンド
# 起動
$ appium &
# 終了
$ killall -9 node
3-3 サンプルコードを試してみる
-
サンプルソースをダウンロード
$ git clone https://github.com/appium/sample-code.git APPIUM_SAMPLE
-
cloneしたプロジェクトのルートに移動する
-
サンプルコードのルートに移動する
$cd sample-code/examples/node
-
実行
$ node android-webview.js
5.エラーでハマる。。。
- モジュールがない
-
npm-install-missing
があるんですね。知らなかった。。。 - mochaを入れないといけない?
$ npm install -g mocha
- エミュレーターが起動していないから?
- Dockerが起動していて、エミュレータが起動しなかった。。。(Virtual boxなんて起動してねーよと思いながら)
$ mocha android-simple.js
- 別のエラーがでる
1) android simple "before all" hook:
Error: [init({"browserName":"","appium-version":"1.3","platformName":"Android","platformVersion":"4.4.2","deviceName":"Android Emulator","app":"http://appium.github.io/appium/assets/ApiDemos-debug.apk"})] The environment you requested was unavailable.
at node_modules/wd/lib/webdriver.js:129:15
at Request._callback (node_modules/wd/lib/http-utils.js:87:7)
at Request.self.callback (node_modules/request/request.js:368:22)
at Request.<anonymous> (node_modules/request/request.js:1219:14)
at IncomingMessage.<anonymous> (node_modules/request/request.js:1167:12)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
2) android simple "after all" hook:
Error: [quit()] Unexpected data in simpleCallback.
at exports.newError (node_modules/wd/lib/utils.js:139:13)
at PromiseWebdriver.<anonymous> (node_modules/wd/lib/callbacks.js:42:12)
at cb (node_modules/wd/lib/webdriver.js:160:22)
at node_modules/wd/lib/webdriver.js:174:5
at Request._callback (node_modules/wd/lib/http-utils.js:87:7)
at Request.self.callback (node_modules/request/request.js:368:22)
at Request.<anonymous> (node_modules/request/request.js:1219:14)
at IncomingMessage.<anonymous> (node_modules/request/request.js:1167:12)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
4. 結論
- インストールはできた。
- サンプルコードを動かすことができなかった。。=> 原因調査中
- しょーもないミスで、時間を潰す前にテストは書こうという話
5. TODO
- サンプルコードは諦めて、自分でアプリとコマンドを書いて試してみる
6. 書籍
実践 Appium(Amazonリンクです)を購入して読んででいます。
2016/11/26 くらいにでたのに、FirefoxOSの事も書いてあり、ちょっと古いのかな。。