20131227_appium+rspec

1,878 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,878
On SlideShare
0
From Embeds
0
Number of Embeds
668
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

20131227_appium+rspec

  1. 1. Appium+RSpec Kazuaki MATSUO
  2. 2. 目的/目標 ● 目的 ○ 自プロジェクトのiOS/Androidアプリを実行し、Appiumを 使いテストすることができるようになることで、Appiumに 対するノウハウを蓄積する ■ その他、必要な知識(nvm/npm/rvm)も知る ○ Appiumでできることを知り、何ができそうか見立てをた てる ● 目標 ○ 何らかのシナリオに記述した操作を、アプリ起動後1回 でも行うことができるようにする ○ rvm/nvm/npmの存在を知る ● 言及しないこと ○ 自動化できる箇所/できない箇所/設計などには言及しま
  3. 3. about appium ● WebDriverをもとに、iOS/Android/FireFoxOS向けアプリを テストできるように開発されているOSS ○ イメージとしては、SeleniumのiOS/Android向け版 ○ Sauce Labs が開発の中心 ● WebDriverはW3Cとして仕様が固まってきている ○ FireFoxOSはWebDriver APIに対応している ■ https://dvcs.w3.org/hg/webdriver/rawfile/tip/webdriver-spec.html ● AppiumのWebページ ○ http://appium.io ● Github ○ https://github.com/appium/appium
  4. 4. 寄り道:類似プロジェクト ios-driver(http://ios-driver.github.io/ios-driver/) Selendroid(http://selendroid.io) Appiumは特定のバージョン以下はAndroidを対象としたものは Seledroidを使っている。 上記2プロジェクトとAppium、Seleniumは今後互いを意識しな がら開発を進めようとしているらしく、それらを全体として Seleniumファミリーとしてとらえて情報を追っていった方が良い かもしれませんね。
  5. 5. 仕組み(ざっくり) テストシナリオ described in Ruby/Python/Java... Appium向けAPI Appium server 通信の仕組みは iOS/Androidに依存 iOS Android
  6. 6. Positive SDKを、試験対象に埋め込む必要が無い => ユーザに直接届けるリリース物を試験することができる。 JsonWriteProtocolにより記述できるため、Selenium/Appium とシナリオの共通化も可能 => WebViewベースのものとかできるかもしれないですね
  7. 7. Negative 日本語の資料が少ない => 基本はWebDriverなので、あまり問題は無いかも。 メンテナンス性を考えると、シナリオの記述方法やまとめ方を考 えなければ複雑になるかも。
  8. 8. 考えなければいけないこと どこを自動化するか? 変更の頻度は?
  9. 9. デモ
  10. 10. ここからの流れ 1. nvm/npmを使いAppiumをインストール 2. rvmを使い、シナリオに使うRSpecの実行環境 を整える 3. 試しにappiumを動かしてみる 4. サンプルプロジェクトを動かしてみる 5. デモで動かしたRSpecシナリオを読んで、どうい う操作ができるのか見てみる
  11. 11. install “nvm” to manage node $ git clone git://github.com/creationix/nvm.git ~/.nvm $ source ~/.nvm/nvm.sh $ nvm install v0.11.9 ※ $ nvm ls-remote にて、現在インストール可能なすべてのリ ストを取得可能
  12. 12. install “nvm” to manage node $ nvm alias default v0.11.9 次回以降、ターミナルを開くたびにnvm関連を有効にしたいの で、bash_profileに以下を入力しておきましょう。 $ vi ~/.bash_profile > source ~/.nvm/nvm.sh > npm_dir=${NVM_PATH}_modules > export NODE_PATH=$npm_dir
  13. 13. install appium インストール用ライブラリは NODE_PATH に保存 されます。 $ sudo npm install -g appium@0.12.3 ※20131227現在、0.13.0がインストールできるの ですが、動作確認している0.12.3を使います
  14. 14. appiumの実行環境のチェック 0.13.0から、appium-doctorが正常に動作します $ appium-doctor 出力例(次ページ)
  15. 15. appiumの実行環境のチェック(標準出力) > Running iOS Checks > ✔ Xcode is installed at /Applications/Xcode.app/Contents/Developer > ✔ Xcode Command Line Tools are installed. > ✔ DevToolsSecurity is enabled. > ✔ The Authorization DB is set up properly. > ✔ Node binary found using which command at /Users/username/.nvm/v0.11.9/bin/node > ✔ iOS Checks were successful. > Running Android Checks > ✔ ANDROID_HOME is set to "/Applications/android-sdk-macosx" > ✔ JAVA_HOME is set to "/System/Library/Frameworks/JavaVM.framework/Home." > ✔ ADB exists at /Applications/android-sdk-macosx/platform-tools/adb > ✔ Android exists at /Applications/android-sdk-macosx/tools/android > ✔ Emulator exists at /Applications/android-sdk-macosx/tools/emulator > ✔ Android Checks were successful. > ✔ All Checks were successful
  16. 16. rvmのインストール rvmによるrubyのインストール $ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) $ rvm install 1.9.3 $ rvm use 1.9.3 $ ruby -v
  17. 17. Appium向けサンプルシナリオの取得 RSpecのサンプルダウンロード $ git clone https://github.com/KazuCocoa/sampleSenarioForAppium.git Git clone後、カレントディレクトリを移動 $ cd sampleSenarioForAppium $ bundle install
  18. 18. Appium向けサンプルシナリオの実行 appiumの起動 $ appium -a localhost エラー? ※直ぐにわからないエラーの場合、別案でappiumを起動します。 シナリオ実行 bundle installしたディレクトリ配下で・・・ $ rspec sample_ios.rb エラー? xcodeのバージョン? xcodeに所定のシミュレータが入っていない? ※サンプルでは、ios7向けシミュレータがあれば動作はします
  19. 19. サンプルシナリオの中身:Gemfile ● Gemfile source "https://www.rubygems.org" gem "rest-client" gem "rspec" gem "selenium-webdriver" gem "cucumber" gem "rspec-expectations"
  20. 20. サンプルシナリオの中身: sample-ios.rb - 1 require 'rubygems' require 'selenium-webdriver' require 'date' require 'rspec' require '../parameters' # obtain each parameters describe 'sample senario' do
  21. 21. サンプルシナリオの中身: sample-ios.rb - 2 (RSpecの基本構成) describe 'sample senario' do before :all do end after :all do end before :each do end after :each do end # sinario
  22. 22. サンプルシナリオの中身: sample-ios.rb - 3 describe 'sample senario' do before :all do @client = Selenium::WebDriver::Remote::Http::Default.new @client.timeout = 120 # secound @driver = Selenium::WebDriver.for(:remote, :http_client => @client, :desired_capabilities => IOS_CAPABILITIES, :url => SERVER_RUL) @driver.manage.timeouts.implicit_wait = 10 # seconds @driver_wait = Selenium::WebDriver::Wait.new :timeout => 30 end after :all do @driver.quit if @driver end
  23. 23. サンプルシナリオの中身: sample-ios.rb - 4 before :each do end after :each do end # sinario # 初期化 describe '' do context '' do it '' do 実際は、ここにシナリオを記述する end end end end
  24. 24. サンプルシナリオの中身: ../parameters.rb - 1 APP_PATH_IOS = 'https://dl.dropboxusercontent.com/u/1265532/SampleForAppium.app.zip'.freeze APP_PATH_ANDROID = '/Users/username/Documents/test.apk'.freeze TARGET_SERVER = 'http://localhost:4723'.freeze SCREENSHOT_SAVE_PATH = "#{Date::today.to_s}/".freeze FileUtils.mkdir_p(SCREENSHOT_SAVE_PATH) unless FileTest.exist? (SCREENSHOT_SAVE_PATH) # capabilities for Appium IOS_CAPABILITIES = { 'browserName' => '', 'device' => 'iPhone', 'deviceName' => 'iPhone Retina (4-inch)', #only for ios simulator: 'iPhone Retina (3.5-inch)' 'version' => '7.0', 'app' => APP_PATH_IOS }.freeze SERVER_RUL = "#{TARGET_SERVER}/wd/hub".freeze
  25. 25. あとは・・・ 基本的な設定でAppiumとシミュレータが動作した ら、あとはシナリオを順に書いていくだけ!!
  26. 26. インスペクタによるアプリの確認 Mac向けアプリのダウンロード https://github.com/appium/appium/releases/tag/v0.12.3 時間無ければ、ブログを参考にする。 もしくは、その場で画面に表示させながら。
  27. 27. Tips
  28. 28. こんなことできる
  29. 29. SDKのようなモジュールを組み込んだ環境ではない => とある、Webページを描画する機能において、特定のボタンを 押下後、”実際に端末側画面の描画が完了した”時点までの経 過時間を計測可能 => ユーザ目線での、体感の応答性をはかることが可能 ※ネットワークの遅延もふまえた上での実測値であることが大 事

×