iosアプリ uiテスト自動化入門

39
iOSアプリ UIテスト自動化入門 AppiumによるE2Eテスト~

Upload: shingo-tamaki

Post on 17-Jul-2015

721 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: iOSアプリ UIテスト自動化入門

iOSアプリ

UIテスト自動化入門~AppiumによるE2Eテスト~

Page 2: iOSアプリ UIテスト自動化入門

agenda• 前提知識

• OS標準のUIテストツール

• Appiumとは

• 今後の展開

Page 3: iOSアプリ UIテスト自動化入門

前提知識

Ruby Bundler Gem RSpec Cucumber Turnip Gherkin BDD

UIAutomation Tuneup.js uiautomator Javascript Node.js npm Selenium

Page 4: iOSアプリ UIテスト自動化入門
Page 5: iOSアプリ UIテスト自動化入門

UIテストどうしてます?

Page 6: iOSアプリ UIテスト自動化入門

目視

Page 7: iOSアプリ UIテスト自動化入門

スクリーンショット (手動)をExcelに

Page 8: iOSアプリ UIテスト自動化入門

ある人は言いました

Page 9: iOSアプリ UIテスト自動化入門

これはもう人類のやる作業じゃないよね

Page 10: iOSアプリ UIテスト自動化入門

自動化しましょう

Page 11: iOSアプリ UIテスト自動化入門

UIAutomation

iOSアプリ開発の標準ツールInstrumentsのテンプレートの一つ、UIの操作をjavascriptでレコードし、iPhoneSimulator及びiPhone実機で操作を追実行出来る。スクリーンショットなども取れる。https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/

UsingtheAutomationInstrument/UsingtheAutomationInstrument.html#//apple_ref/doc/uid/TP40004652-CH20

https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/UIAutomationRef/_index.html#//apple_ref/doc/uid/TP40009771

Page 12: iOSアプリ UIテスト自動化入門

使い勝手を良くする為の フレームワークもあります。

Page 13: iOSアプリ UIテスト自動化入門

Turneup JS

Page 14: iOSアプリ UIテスト自動化入門

Turneup JS

UIAutomationのコードを素のまま書くとちょっと冗長になので、その点を補完されている。jsライブラリ

http://www.tuneupjs.org

Page 15: iOSアプリ UIテスト自動化入門

iOSだけ?

Page 16: iOSアプリ UIテスト自動化入門

UIテスト自動化ツールはAndroid標準もあります。

Page 17: iOSアプリ UIテスト自動化入門

uiautomator

Page 18: iOSアプリ UIテスト自動化入門

また新しいツール使い方覚えなきゃいけないの?

Page 19: iOSアプリ UIテスト自動化入門

ある程度は仕方ない

Page 20: iOSアプリ UIテスト自動化入門

既存のテスティングフレームワークを使えないの?

Page 21: iOSアプリ UIテスト自動化入門

既存のテスティングフレームワークって?

Page 22: iOSアプリ UIテスト自動化入門

xUnit系(JUnit、OCUnit、NUnit)、BDD系(RSpec,Cucumebr)

Page 23: iOSアプリ UIテスト自動化入門

慣れたツール・言語でやれるに越したことはないよね?

Page 24: iOSアプリ UIテスト自動化入門

こっから今日の本題

Page 25: iOSアプリ UIテスト自動化入門

Appium

Page 26: iOSアプリ UIテスト自動化入門

Appium

iOS/AndroidのUIテスト自動化ツール、Selenium WebDriverを使用している為、

Web系の開発でSeleniumを使ってた人は 比較的導入が楽。

Page 27: iOSアプリ UIテスト自動化入門

Appiumの構成

Page 28: iOSアプリ UIテスト自動化入門

Appiumのイイトコ

・リリースビルドのバイナリを使える。 アプリにSDKの埋め込みをする必要がありません。

・言語・テスティングフレームワークが自由

Page 29: iOSアプリ UIテスト自動化入門

Appiumのビミョーなトコ

・ちょっと遅い ・Selenium WebDriverの知識必須

Page 30: iOSアプリ UIテスト自動化入門

Turnip

Turnip は、受け入れテストのフレームワークである Cucumber によって整備されてきた feature ファイルと step_definitions ファイルの構成 (Gherkin 書式) を RSpec 内でテスト実行することができる新鋭のライブラリで、Cucumber の改善案として提案されました。Cucumberの後継としてWeb システムでのエンドツーエンドのテストを自動化する際に利用できます。 Cucumber の問題点を改善して実装されている筋の良さで、今後の普及が期待されています。(下記リンクから抜粋)

http://magazine.rubyist.net/?0042-FromCucumberToTurnip

Page 31: iOSアプリ UIテスト自動化入門

http://www.slideshare.net/KazuMatsu/20141018-selenium-appiumcookpad

Page 32: iOSアプリ UIテスト自動化入門

Scenario機能: UI操作テスト Appiumの操作を理解する為にアプリでよくある操作を行ってみます。

シナリオ: スイッチを操作する * "Switches" をタップ * 1 番目のスイッチをON * 2 番目のスイッチをOFF * 戻る

シナリオ: スライダーを操作する * "Sliders" をタップ * 1 番目のスライダーに 80 %を指定 * 戻る

シナリオ: 日付ピッカーを操作する * "Date Picker" をタップ * 日付ピッカーに "2014/11/25 12:23:55" を指定 * 戻る

Page 33: iOSアプリ UIテスト自動化入門

Step#タップ step ":name をタップ" do |name| find(name).click end

#スイッチ step ":index 番目のスイッチをON" do |index| sleep 0.5 ele_index('UIASwitch',index.to_i).send_keys("1") end

#DatePicker操作 step "日付ピッカーに :dateTime を指定" do |dateTime| sleep 0.5 pickerDate = tags("UIAPickerWheel")[0] pickerHour = tags("UIAPickerWheel")[1] pickerMinute = tags("UIAPickerWheel")[2] pickerAmPm = tags("UIAPickerWheel")[3]

date = DateTime.strptime(dateTime,"%Y/%m/%d %H:%M:%S") pickerDate.send_keys(date.strftime("%Y/%m/%d %H:%M:%S")) pickerHour.send_keys(date.hour.to_s) pickerMinute.send_keys(date.minute.to_s) pickerAmPm.send_keys(date.strftime("%p")) end

Page 34: iOSアプリ UIテスト自動化入門

demo

Page 35: iOSアプリ UIテスト自動化入門

学習コスト

Page 36: iOSアプリ UIテスト自動化入門

Stepの作成する場合は結構手間

Page 37: iOSアプリ UIテスト自動化入門

Scenarioが書ければいい

Page 38: iOSアプリ UIテスト自動化入門

今後の予定

・ImageMagickでスクリーンショットの差分画像作成の自動化 ・Jenkins、Grunt、gulpと組み合わせる

・hubot等のChatOpsからの実行

・Androidで同じシナリオを実行する

Page 39: iOSアプリ UIテスト自動化入門

以上ご静聴ありがとうございました。