Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Androidテスティング実践2 システムテスト編

2,971 views

Published on

NTTソフトウェア社内のソフト道場研修で実施した、Androidテスティング実践研修テキストの2. システムテスト編です。

Published in: Technology
  • Be the first to comment

Androidテスティング実践2 システムテスト編

  1. 1. Androidテスティング実践 ②システムテスト編
  2. 2. 本スライドは、NTTソフトウェア社内技術者育成研修(ソフト道場研修)テキストです。 【著作権・免責事項】  本セミナーコースの内容、本資料のすべての著作権は、NTTソフトウェア株式会社に帰属します。  無断での本資料の複写、複製、再利用、転載、転用を禁じます。  本資料と演習等で利用するすべての教材は、NTTソフトウェア株式会社からの保証なしに提供されます。  本書に記載されている会社名および製品名は、一般に各社の商標または登録商標です。 56 ※ 演習問題に関するスライドは、一部を除き、本ファイルには含まれておりません。 また、演習に必要なソースコードも含まれておりません。ご了承ください。 Copyright © 2016, NTT Software Corporation.
  3. 3. 2. システムテストの自動化  この研修で紹介するツールの使い分け  Robotium (座学+演習)  Espresso (座学+演習)  UI Automator (座学+演習)  Appium (座学) 57Copyright © 2016, NTT Software Corporation.
  4. 4. この研修で紹介するツールの使い分け 画面単位のホワイトボックステストがしたい Espresso 1アプリ内複数画面にまたがるブラックボックス テストがしたい Robotium・UI Automator・Appium 複数アプリにまたがる(ブラックボックス) テストがしたい UI Automator: 1テストケース内でEspressoと併用OK Appium: Selenium WebDriver経験者向け。 iOSもテストOK 58Copyright © 2016, NTT Software Corporation.
  5. 5. 59 Robotium Copyright © 2016, NTT Software Corporation.
  6. 6. 【Robotium】概要 UIテストを容易に自動化できるフレームワーク ブラックボックステスト向け Android 2.2以上対応 Instrumented Testとして実装 URL: https://github.com/RobotiumTech/robotium Apache License 2.0 Copyright © 2016, NTT Software Corporation. 60 https://github.com/RobotiumTech/robotium よりロゴを引用
  7. 7. 【Robotium】おすすめポイント ネイティブアプリ・WebView両方ともテストできる WebView対応はAndroid 4.0以降 テストシナリオの書き方が直感的で分かりやすい 画面のレイアウトヒエラルキーを気にせず、見た目だけで書ける。 「OKと表示されたButtonを押せ」 「画面上から6番目のEditTextに"Hello"と入力せよ」 etc. 複数画面(Activity)にまたがるテストができる 61Copyright © 2016, NTT Software Corporation.
  8. 8. 【Robotium】注意点 Google公式ではない Android最新バージョンへの追随が遅いことも Androidの非公開APIを利用して実装されている 機種によっては動作しない可能性あり うまく動かない場合はFAQ参照 https://goo.gl/nbWkTA 複数アプリにまたがったテストができない Copyright © 2016, NTT Software Corporation. 62
  9. 9. 【Robotium】環境設定 ATSLの設定に加えて、app/build.gradleに以下を追加 63 dependencies { // ATSLの設定は省略 androidTestCompile ¥ 'com.jayway.android.robotium:robotium-solo:5.5.4' } Copyright © 2016, NTT Software Corporation.
  10. 10. 【Robotium】テストコードの書き方: setup 64 @RunWith(AndroidJUnit4.class) public class MyRobotiumTest { // ActivityTestRuleの宣言は省略 @Rule public ActivityTestRule<...> activityTestRule = ...; private Solo solo; @Before public void setUp() throws Exception { solo = new Solo(InstrumentationRegistry. getInstrumentation(), activityTestRule.getActivity()); } Robotiumの主要クラスSoloをインスタンス化する Copyright © 2016, NTT Software Corporation.
  11. 11. 【Robotium】テストコードの書き方: tear down 65 ... @After public void tearDown() throws Exception { solo.finishOpenedActivities(); } } Solo#finishOpenedActivities()を呼び出す Copyright © 2016, NTT Software Corporation.
  12. 12. 【Robotium】テスト用APIの紹介: 概要 Javadoc http://recorder.robotium.com/javadoc/ Soloクラス 全てのテスト用APIは、Soloクラスのメソッドに集約 Copyright © 2016, NTT Software Corporation. 66
  13. 13. 【Robotium】テスト用APIの紹介: 文字列指定操作 UI部品の表示文字列(正規表現)を指定してクリック 67 solo.clickOnText("Dialog"); solo.clickOnButton("Text Entry dialog"); 「.」「+」「*」などの メタキャラクタはエスケープが必要 Copyright © 2016, NTT Software Corporation.
  14. 14. 【Robotium】テスト用APIの紹介: 位置指定操作 UI部品の番号を指定してクリック 68 ⑦ ② ③ ④ ⑤ ⑥ ① solo.clickInList(4); リストの4行目(1始まり)をクリック ⑦ ② ③ ④ ⑤ ⑥ ① ⓪ index 7(0始まり)のボタンをクリック solo.clickOnButton(7); Copyright © 2016, NTT Software Corporation.
  15. 15. 【Robotium】テスト用APIの紹介: 文字列取得・入力 表示文字列の取得・テキスト入力 69 メソッド(Soloクラス) 概要 searchText(String) 指定された正規表現にマッチする文字列を表示し ているUI部品を探す。見付かればtrueを返す。 enterText(int, String) 指定されたindex(0始まり)に存在するEditText に対して、指定された文字列を入力する。 getText(String) 指定された正規表現にマッチする文字列を表示し ているTextViewを返す。 getEditText(int) 指定されたindex(0始まり)に存在するEditText を返す。 画面のどこにでも良いから文字列が表示されているか確認する場合は searchText()が便利 特定のViewに表示されている文字列を確認する場合は、 getText()・getEditText()でTextView・EditTextを取得してから TextView#getText()・EditText#getText()を使う Copyright © 2016, NTT Software Corporation.
  16. 16. 【Robotium】テスト用APIの紹介: そのほか そのほか 70 メソッド(Soloクラス) 概要 assertCurrentActivity(St ring, Class) 現在の画面が指定されたActivity(クラス) であることをassertする。 takeScreenshot() 画面のスクリーンショットを撮る。 /sdcard/Robotium-Screenshots/に保存。 clickOnWebElement(By) 指定された検索条件(Byオブジェクト)に合致した WebView内HTML部品をクリックする。 typeTextInWebElement(By, String) 指定された検索条件(Byオブジェクト)に合致した WebView内HTML部品(フォーム)に対して、 指定された文字列を入力する。 ※スクリーンショットを撮る場合は、テスト対象アプリ側に、以下のパー ミッション宣言が必要 <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" /> Copyright © 2016, NTT Software Corporation.
  17. 17. 【Robotium】演習2-2 Robotiumを使って、以下のテストシナリオを実現してくだ さい。 1つめのEditTextに「5」を入力する 2つめのEditTextに「8」に入力する 「この画面に表示」ボタンをクリックする 画面のどこかに「13」と表示されることを確認する テストクラス名: RobotiumTest 参考スライド ①基礎編【演習1-1】ATSLのための設定 【Robotium】環境設定 【Robotium】テストコードの書き方 【Robotium】テスト用APIの紹介: 表示文字列の取得・テキスト入力 71Copyright © 2016, NTT Software Corporation.
  18. 18. 72 Espresso Copyright © 2016, NTT Software Corporation.
  19. 19. 【Espresso】概要 Google謹製の、ホワイトボックステスト向けUI テストフレームワーク コードの簡潔さ、信頼性の高さに定評有り APIレベル8, 10, 15-19, 21に対応 概ねAndroid 2.2以上(3.x除く) Instrumented Testとして実装 URL: https://goo.gl/x8eP5C https://goo.gl/lmrlJI Apache License 2.0 Copyright © 2016, NTT Software Corporation. 73 https://google.github.io/android-testing-support-library/docs/espresso/cheatsheet/index.html よりロゴを引用
  20. 20. 【Espresso】おすすめポイント Google謹製なので最新バージョンへの素早い追随が期待 できる Google社内で実際に使われている テスト結果もRobotiumより安定 ネイティブアプリ・WebView両方ともテストできる テストシナリオの書き方がシンプル 比較的実行速度が速い 74Copyright © 2016, NTT Software Corporation.
  21. 21. 【Espresso】注意点 複数Activityにまたがったテストができない 複数アプリにまたがったテストもできない APIが独特なので学習コストが高い 75Copyright © 2016, NTT Software Corporation.
  22. 22. 【Espresso】環境設定 ATSLの設定に加えて、app/build.gradleに以下を追加 76 dependencies { // ATSLの設定は省略 androidTestCompile ¥ 'com.android.support.test.espresso:espresso-core:2.2.2' } モジュール名:バージョン 概要 espresso-intents:2.2.2 別Activity起動時に発行するIntentを確認できる 起動元Intentのモックを作成できる espresso-web:2.2.2 WebView内部をテストできる 以下の追加モジュールもあり(詳細は省略) Copyright © 2016, NTT Software Corporation.
  23. 23. 【Espresso】テストコードの書き方: setup/tear down 77 @RunWith(AndroidJUnit4.class) public class MyEspressoTest { @Rule public ActivityTestRule<...> activityTestRule = ...; ... } ATSLのための準備だけでOK Copyright © 2016, NTT Software Corporation.
  24. 24. 【Espresso】テスト用APIの紹介: 概要 78 概要 ViewMatcher Viewの検索条件を指定する。ViewMatchersクラス参照。 withId(), withClassName(), withText(), ... ※hamcrestのallOf(), not(), is(),なども使える ViewAction Viewに対する操作を指定する。ViewActionsクラス参照。 clearText(), typeText(), click(), ... ViewAssertion 確認条件を指定する。ViewAssertionsクラス参照。 doesNotExist(), matches(ViewMatcher), ... onView(ViewMatcher) .perform(ViewAction) .check(ViewAssertion); 以下の基本形を理解する ※perform(), check()は省略可  「ViewMatcher」にあてはまる Viewに対して  「ViewAction」を実行した結果  そのViewが「ViewAssertion」 を満たすことを確認する Copyright © 2016, NTT Software Corporation.
  25. 25. 【Espresso】テスト用APIの紹介: 概要 Javadoc http://goo.gl/UwGTdf (android.support.test.espresso.*パッケージ) Espresso Cheat Sheet https://goo.gl/6xcuqd 以下の3クラスが重要 android.support.test.espresso.matcher.ViewMatchers android.support.test.espresso.action.ViewActions android.support.test.espresso.assertion.ViewAssertions Copyright © 2016, NTT Software Corporation. 79
  26. 26. 【Espresso】テスト用APIの紹介: ViewMatchers 検索条件を表すメソッドが定義されている 80 メソッド 概要 withId(int) 指定されたIDを持つView withText(String) 指定されたテキストが表示されている View withContentDescription(String) 指定されたcontentDescription属性を 持ったView withClassName(Matcher<String>) 指定されたクラス名のView ※引数には「is(クラス名)」を指定する hamcrestのmatcherを使うこともある(CoreMatchers) allOf(条件1, 条件2, ...) anyOf(条件1, 条件2, ...) is() not() Copyright © 2016, NTT Software Corporation.
  27. 27. 【Espresso】テスト用APIの紹介: ViewActions onView()で特定したViewに対する操作を表すメソッド が定義されている 81 メソッド 概要 click() クリックする pressBack() 戻るキーを押す(どのViewに対して実行しても同じ) typeText(String) 指定された文字列を入力する scrollTo() onView()で指定されたViewまでスクロールする Copyright © 2016, NTT Software Corporation.
  28. 28. 【Espresso】テスト用APIの紹介: ViewAssertions onView()で特定したViewに対してチェックするメソッ ドが定義されている 82 メソッド 概要 doesNotExist() そのViewが存在しないことを確認する matches(Matcher) そのViewが、引数で指定した条件を満たしていることを確 認する maches()の引数には、任意のViewMatchersが指定できる テキスト"text"が表示されているか確認する matches(withText("text")) Viewが画面に表示されていることを確認する matches(isDisplayed()) Copyright © 2016, NTT Software Corporation.
  29. 29. 【Espresso】実例紹介(1/2) TextView (IDはR.id.textview)に"Hello"と表示されてい ることを確認する。 83 onView(withId(R.id.textview)) .check(matches(withText("Hello"))); "Press Me"と書かれているボタンを押す。 onView(withText("Press Me")).perform(click()); "Hello"と書かれているボタンを押す。 ただし、"Hello"と書かれているTextViewも存在。 onView(allOf(withClassName(is(Button.class.getName())), withText("Hello"))) .perform(click()); Copyright © 2016, NTT Software Corporation.
  30. 30. 【Espresso】実例紹介(2/2) EditText (IDはR.id.input)に"Hello"と入力してからソフ トウェアキーボードを閉じる。 84 onView(withId(R.id.input)) .perform(typeText("Hello"), closeSoftKeyboard()); 画面外にあるかも知れない"Press Me"と書かれているボ タンを押す。 onView(withText("Press Me")) .perform(scrollTo(), click()); ※perform()の引数に複数ViewActionを並べると、左から順番に実行する。 Copyright © 2016, NTT Software Corporation.
  31. 31. 【Espresso】そのほかの応用的な機能 AdapterView (ListViewなど)の中身を検索したいとき onView()の代わりにonData()を使う https://goo.gl/UFhj8h WebViewの中身を検索したいとき Espresso-Webを使う。APIも異なる。 https://goo.gl/X3hu4K そのほかいろいろ 「Espresso Advanced Samples」 https://goo.gl/RN3vOc Copyright © 2016, NTT Software Corporation. 85
  32. 32. 【Espresso】演習2-3 Espressoを使って、以下のテストシナリオを 実現してください。 1つめのEditTextに「5」を入力する 2つめのEditTextに「8」に入力する 「この画面に表示」ボタンをクリックする 「結果:」の右にあるTextViewに「13」と表示されることを確認する テストクラス名: EspressoTest 参考スライド ①基礎編【演習1-1】ATSLのための設定 【Espresso】環境設定 【Espresso】テストコードの書き方 【Espresso】テスト用APIの紹介 86Copyright © 2016, NTT Software Corporation.
  33. 33. 87 UI Automator Copyright © 2016, NTT Software Corporation.
  34. 34. 【UI Automator】概要 Google謹製の、ブラックボックステスト向けUI テストフレームワーク 別アプリにまたがったテストができる 他人が作ったアプリやプリインアプリでもOK Android 4.3以上に対応 安定性の面でAndroid 5.0以上が無難 Instrumented Testとして実装 Espressoと混ぜて使うのもOK URL: https://goo.gl/6ZFz89 Apache License 2.0 Copyright © 2016, NTT Software Corporation. 88
  35. 35. 【UI Automator】おすすめポイント 3rd-party製アプリの試験ができる apkが無くても試験可能 Espressoと共用できる 89Copyright © 2016, NTT Software Corporation.
  36. 36. 【UI Automator】注意点 できることが限定されている UI部品の操作と状態確認、表示文字列確認に限定 Instrumentation対象のアプリ以外が持つ インスタンス(ActivityやViewなど)へのアクセス不可 明示的に同期を取る必要がある EditTextに入力した直後だと、 まだ入力された文字列が取得できないことも。 同じ目的のAPIが複数ある (動作仕様や、できることが微妙に違う) UiObject: スクロールサポート充実。同期系APIが貧弱。 UiObject2: スクロールサポートなし。柔軟な同期系API。 90Copyright © 2016, NTT Software Corporation.
  37. 37. 【UI Automator】環境設定 ATSLの設定に加えて、app/build.gradleに以下を追加 91 dependencies { // ATSLの設定は省略 androidTestCompile ¥ 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' } Copyright © 2016, NTT Software Corporation.
  38. 38. 【UI Automator】テストコードの書き方 92 @RunWith(AndroidJUnit4.class) public class MyUiautomatorTest { @Rule public ActivityTestRule<...> activityTestRule = ...; private UiDevice uiDevice; @Before public void setUp() throws Exception { uiDevice = UiDevice.getInstance(InstrumentationRegistry .getInstrumentation()); } ... } ATSLの設定に加えて UiDeviceオブジェクトの初期化が必要 Copyright © 2016, NTT Software Corporation.
  39. 39. 【UI Automator】テスト用APIの紹介: 検索(1/2) 条件にあったUI部品を検索する 93 UiObject uiObject = uiDevice.findObject(<検索条件1>) // または UiObject2 uiObject = uiDevice.findObject(<検索条件2>) 検索条件1はUiSelectorオブジェクトで表現 //検索条件1 new UiSelector().text("OK").className(Button.class) 検索条件2はBySelectorオブジェクトで表現 //検索条件2 By.text("OK").clazz(Button.class) Copyright © 2016, NTT Software Corporation.
  40. 40. 【UI Automator】テスト用APIの紹介: 検索(2/2) 94 UiSelector検索条件 (UiObject向け) メソッド 概要 className(Class) Viewのクラス(EditTextやButtonなど)を条件に指定する text(String) Viewの表示文字列を条件に指定する description(String) ViewのcontentDescription属性値を条件に指定する resourceId(String) ViewのリソースID(文字列表現)を条件に指定する BySelector検索条件 (UiObject2向け) メソッド 概要 clazz(Class) Viewのクラス(EditTextやButtonなど)を条件に指定する text(String) Viewの表示文字列を条件に指定する desc(String) ViewのcontentDescription属性値を条件に指定する res(String) ViewのリソースID(文字列表現)を条件に指定する Copyright © 2016, NTT Software Corporation.
  41. 41. 【UI Automator】テスト用APIの紹介: UiObject系 UiObject/UiObject2で同名のメソッド 95 メソッド 概要 click() クリックする setText(String) 指定された文字列を入力する getText() 設定されている文字列を取得する isFocused() フォーカスが当たっているかどうかを取得する Copyright © 2016, NTT Software Corporation.
  42. 42. 【UI Automator】テスト用APIの紹介: UiObject系 96 「OK」ボタンをクリックする例 // UiObjectを使う場合 UiObject okButton = uiDevice.findObject(new UiSelector().text("OK"). className(Button.class)); okButton .click(); // UiObject2を使う場合 UiObject2 okButton2 = uiDevice.findObject(By.text("OK").clazz(Button.class)); okButton2.click(); Copyright © 2016, NTT Software Corporation.
  43. 43. 【UI Automator】テスト用APIの紹介: 同期系(1/4) UiObjectを使うときはUiObjectのメソッドを呼ぶ 97 メソッド(引数はタイムアウト値) 概要 clickAndWaitForNewWindow(long) クリックしてから、新しい窓(ダイアログ など)が表示されるまで待つ waitForExists(long) このViewが表示されるまで待つ // 「OK」ボタンを押して、ダイアログが表示されるまで待つ UiObject okButton = uiDevice.findObject(new UiSelector().text("OK"). className(Button.class)); // ダイアログが表示されるまで2000msec待つ。タイムアウト時はテスト失敗。 assertThat(okButton.clickAndWaitForNewWindow(2000L), is(true)); // ここから表示されたダイアログに対する操作を行う サンプルコード ※タイムアウトした場合は、falseが返される Copyright © 2016, NTT Software Corporation.
  44. 44. 【UI Automator】テスト用APIの紹介: 同期系(2/4) UiObject2は以下の汎用的なメソッドを使う 98 メソッド(引数は条件とタイムアウト値) 概要 clickAndWait(EventCondition, long) クリックしてから、指定された条件が満 たされるまで待つ wait(SearchCondition, long) ※UiObject2とUiDeviceの両方に存在 指定された条件が満たされるまで待つ wait(UiObject2Condition, long) 指定された条件が満たされるまで待つ 良く使う「条件」はUntilクラスに用意されている Untilクラスのstaticメソッド 概要 newWindow() 新しい窓(ダイアログ)が表示されるまで textEquals(String) 表示文字列が引数で指定された通りになるまで gone(BySelector) 条件に合致するViewが見付からなくなるまで ※タイムアウトした場合は、null/0/falseが返される Copyright © 2016, NTT Software Corporation.
  45. 45. 【UI Automator】テスト用APIの紹介: 同期系(3/4) 99 サンプルコード // 「OK」ボタンを押して、ダイアログが表示されるまで待つ UiObject2 okButton2 = uiDevice.findObject(By.text("OK").clazz(Button.class)); // ダイアログが表示されるまで2000msec待つ boolean result = okButton2.clickAndWait(Until.newWindow(), 2000L); // タイムアウトしたときはテストを失敗させる assertThat(result, is(true)); // ここからダイアログの操作などを行う Copyright © 2016, NTT Software Corporation.
  46. 46. 【UI Automator】テスト用APIの紹介: 同期系(4/4) 同期APIを使えば使うほど遅くなる! 使いすぎ注意! 独立した複数のボタンやテキストボックスを 連続操作するような場合は同期不要 同期APIの使いどころ 一連の操作による、画面の変化を確認したい場合 →確認する直前で同期する ある操作によって画面遷移・ダイアログ表示が発生する場合 →その操作の直後に同期する 100Copyright © 2016, NTT Software Corporation.
  47. 47. 【UI Automator】テスト用APIの紹介: 検索契機 いつ部品を検索しに行くか? UiObject系の場合 操作メソッド(click()など)呼び出し時に検索する 見付からなかったらUiObjectNotFoundException 同じ検索条件なら、複数画面で使い回しOK UiObject2系の場合 findObject(BySelector)呼び出し時に検索する 見付からなかったらnullが返される 画面レイアウトが変わるとUiObject2は無効になる →StaleObjectException 101Copyright © 2016, NTT Software Corporation.
  48. 48. 【UI Automator】インスペクタの利用 Viewの検索条件は、画面の見た目だけでは分からない 調査ツール uiautomatorviewer を使う 1. Android Device Monitor起動 2. [Devices]タブで調査したい デバイスを選ぶ 3. uiautomatorボタンを押す 102Copyright © 2016, NTT Software Corporation.
  49. 49. 【UI Automator】Tips: UiScrollable スクロールすれば現れる画面外の要素を操作できる 103 // 標準ホームアプリのアプリ一覧から、画面外にある //「足し算アプリ」アイコンをタップして起動する。 UiScrollable appViews = new UiScrollable(new UiSelector(). scrollable(true)); // スクロール方向を水平方向に設定 appViews.setAsHorizontalList(); // "足し算アプリ"アプリを起動する UiObject myApp = appViews.getChildByText(new UiSelector(). className(TextView.class), "足し算アプリ"); myApp.clickAndWaitForNewWindow(); Copyright © 2016, NTT Software Corporation.
  50. 50. 【UI Automator】Tips: 日本語入力 UiObject/UiObject2クラスの setText(String)メソッド Android 5.0以上: 日本語入力OK Android 4.4以下: 指定できるのはASCII文字のみ Android 4.4以下で日本語を使う場合は専用のIMEを使う UIAutomator Unicode Input Helper https://github.com/sumio/uiautomator-unicode-input-helper Copyright © 2016, NTT Software Corporation. 104 // 上記IMEをインストールした状態で実行する。 // 「&」が含まれていないASCII文字の入力は今まで通り UiObject editText = uiDevice.findObject(...); editText.setText("Thank you"); // それ以外の文字を入力する時はUtf7ImeHelper.e()で文字列をラップする editText.setText(Utf7ImeHelper.e("ありがとう"));
  51. 51. 【UI Automator】演習2-4 UI Automatorを使って、以下のテストシナリオを 実現してください。 1つめのEditTextに「5」を入力する 2つめのEditTextに「8」に入力する 「この画面に表示」ボタンをクリックする 「結果:」の右「13」と表示されることを確認する テストクラス名: UiautomatorTest UiObject2系のAPIを使ってください リソースIDの文字列表現はuiautomatorviewerで 調べましょう 105Copyright © 2016, NTT Software Corporation.
  52. 52. 106 Appium Copyright © 2016, NTT Software Corporation.
  53. 53. 【Appium】概要 Copyright © 2016, NTT Software Corporation. 107 End2End UIテストフレームワーク Android 2.3.3以上/iOS 6.0以上両対応 別アプリにまたがったテストができる Selenium WebDriverと同様にテストが書ける URL: http://appium.io/ Apache License 2.0 https://github.com/appium よりロゴを引用
  54. 54. 【Appium】アーキテクチャ Copyright © 2016, NTT Software Corporation. 108 http://www.atmarkit.co.jp/ait/articles/1504/27/news025.html より引用 Appiumサーバ: クライアント-テスト対象端末間のプロ キシとして動作 テストスクリプトのプログラム言語は色々選べる
  55. 55. 【Appium】おすすめポイント Selenium WebDriver経験者にとって学習コストが低い テストスクリプトの言語を選べる Ruby, Python, Java, ... ネイティブ・WebViewどちらもテスト可能 Android・iOS両方とも同じようなコードでテストが書ける 簡単にインストールできるGUI版が配布されている (Mac/Windows) 109Copyright © 2016, NTT Software Corporation.
  56. 56. 【Appium】注意点 アーキテクチャの性質上、実行速度が遅い 公式ドキュメントが最新化されていない・少ない Appium 1.3.4向けの日本語解説記事あり @IT「SeleniumのUIテスト自動化をiOS/Androidにもたらす Appiumの基礎知識とインストール方法、基本的な使い方」 http://www.atmarkit.co.jp/ait/articles/1504/27/news025.html テスト対象アプリのAndroidバージョンや、WebView利 用有無によって、テストスクリプトの書き方が変化する 書きはじめる前に確認が必要 Copyright © 2016, NTT Software Corporation. 110
  57. 57. 【Appium】Appium Desktop Appのインストール Appium ServerのGUI版 ダウンロードページ https://bitbucket.org/appium/appium.app/downloads/ インストーラを実行するだけでOK Android開発環境と同一PCにインストールすること 動作に必要なソフトウェア .NET Framework 4.5再配布可能パッケージ (Windowsのみ) JDK7以上 Android SDK Copyright © 2016, NTT Software Corporation. 111
  58. 58. 【Appium】テストプロジェクトのセットアップ (Androidではない)通常のJavaプロジェクト EclipseやIntelliJ IDEAなどで。 build.gradle 112 apply plugin: 'java' // JavaソースコードのエンコーディングをUTF-8とする。 def defaultEncoding = 'UTF-8' tasks.withType(AbstractCompile).each { it.options.encoding = defaultEncoding } repositories { mavenCentral() } dependencies { // Appiumクライアントライブラリを利用するための宣言 testCompile 'io.appium:java-client:3.4.0' testCompile 'junit:junit:4.12' } Copyright © 2016, NTT Software Corporation.
  59. 59. 【Appium】テストコードの書き方: setup AndroidDriverを初期化する そのためにDesired Capabilityの指定が必要 113 public class AppiumTest { private AndroidDriver<MobileElement> mDriver; @Before public void setUp() throws Exception { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); ... mDriver = new AndroidDriver<>( new URL("http://localhost:4723/wd/hub"), capabilities); } Copyright © 2016, NTT Software Corporation.
  60. 60. 【Appium】テストコードの書き方: tear down AndroidDriverを終了する 114 ... @After public void tearDown() throws Exception { mDriver.quit(); } } Copyright © 2016, NTT Software Corporation.
  61. 61. 【Appium】テストコードの書き方: Desired Capabilities テストが実行されるAppiumサーバの性質・機能を表す 詳細は http://www.atmarkit.co.jp/ait/articles/1506/02/news017.html#021 参照 Copyright © 2016, NTT Software Corporation. 115
  62. 62. 【Appium】テスト用APIの紹介: 概要 基本形 Copyright © 2016, NTT Software Corporation. 116 WebElement elem = mDriver.findElement(<検索条件>); elem.<操作> 検索条件(Byクラス・MobileByクラス) http://www.atmarkit.co.jp/ait/articles/1506/02/news017_2.html#031 操作(WebElementクラスのメソッド) http://www.atmarkit.co.jp/ait/articles/1506/02/news017_2.html#034 状態取得(WebElementクラスのメソッド) http://www.atmarkit.co.jp/ait/articles/1506/02/news017_2.html#035
  63. 63. 【Appium】テスト用APIの紹介: 記述例 解説記事のサンプルプログラム https://goo.gl/chfSjz 参照 Appium最新版に対応するために以下の修正が必要 依存ライブラリバージョンの最新化(p.112参照) AndroidDriverをAndroidDriver<MobileElement>に MobileCapabilityTypeをAndroidMobileCapabilityTypeに ChromeDriver関係のエラーが発生する場合 以下から古い(現時点でv2.20)chromedriverをダウンロード、展開 https://goo.gl/0lVlTE 展開した実行ファイルのフルパスを、Appiumの 「Chromedriver Path」に入力 Copyright © 2016, NTT Software Corporation. 117
  64. 64. https://www.ntts.co.jp/products/soft_dojyo/index.html

×