Espresso Driver を用いたAppium テストとその仕組み1Cookpad.apk #2
View Slide
自己紹介•加藤 恭平 (ksfee684)‣ 技術部品質向上グループ‣ レシピサービスの Android アプリで UI テストなどを担当 ‣ おすすめは M:tG
アジェンダ•Appium in Android における仕組み‣ UIAutomator 概要‣ UIAutomator Driver•Espresso Driver 紹介‣ UIAutomator との比較‣ 実際どうなのか•おまけ‣ Project Nitrogen!33
Appium
Appium•モバイル端末向け自動テストツール‣HTTP Server (Node)‣Android, iOS, Windows,macOS
UIAutomator•UI テスティングフレームワーク‣ Accessibility Service を利用‣ アプリを越えて端末操作や情報取得が可能‣ e.g. UI Automator Viewer6
UIAutomator × Appium•UIAutomator Driver として存在•現在 Android のデフォルト Driver!88
ςετରBQL6*"VUPNBUPS4FSWFSBQL"OESPJE5FTUBQLUIAutomator Driver
UIAutomator Driver6*"VUPNBUPS4FSWFSXEIVCTFTTJPOTFTTJPO@JETUBUVTESJWFSTBWF@TDSFFOTIPU3VCZ106J"VUPNBUJPOUBLF4DSFFOTIPU "QQJVN4FSWFSXEIVCTFTTJPOTFTTJPO@JETUBUVT
UIAutomator × Appium•Pros‣ 自身のアプリに限らず操作を行う事が可能• ブラックボックスな自動UIテストを組むことが可能• テキストを利用した操作から Resource ID まで•Cons‣ テスト対象のアプリの操作が難しい• ネットワーク通信待ち合わせのためスリープ!1111
Espresso Driver
UIAutomator Driver6*"VUPNBUPS4FSWFSXEIVCTFTTJPOTFTTJPO@JETUBUVTESJWFSTBWF@TDSFFOTIPU3VCZ136J"VUPNBUJPOUBLF4DSFFOTIPU "QQJVN4FSWFSXEIVCTFTTJPOTFTTJPO@JETUBUVT
&TQSFTTP4FSWFSESJWFSTBWF@TDSFFOTIPU3VCZXEIVCTFTTJPOTFTTJPO@JETUBUVTEspresso DriverXEIVCTFTTJPOTFTTJPO@JETUBUVT
Espresso Driver•appium-espresso-driver‣ Espresso を Driver として利用‣ 対象アプリの署名を書き換え
Espresso × Appium•Pros‣ アプリの Context にアクセス可能に‣ IdlingResource によってスリープによる待ち合わせが不要‣ UIAutomator と同様にブラックボックスに記述できる!•Cons‣ Espresso ができること以外はできない‣ Debug ビルドのみ対応16
実際どうなのか•実際に Driver を置き換えることでどうなるのか‣ 不必要なスリープの減少• シナリオ簡潔さ向上‣ 既存の View 探索以外の手法‣ Driver の指定を変更するだけで便利17
Appium Ruby Client•Capability の automationName を切り替えるだけ?•appium_lib では Espresso Driver への切り替えがシュッとできない•appium_lib_core を直接利用
まとめ•appium-espresso-driver はいいぞ‣ 互換性もだいたいあるぞ•UIAutomator から抜け出してシナリオ洗練させていくぞ19
Project Nitrogen
Project Nitrogen•Write once, run everywhere
Espresso(Robolectric) Driver•Robolectric (JVM) 上で実行•Capability によって切替可能に•対象アプリの実装が必要となるので、 既存アプリのテストケースとしてサーバを実装
Espresso(Robolectric) Driver•シュッとできなかった‣ JUnit の別スレッドで Robolectric が動かない https://github.com/robolectric/robolectric/issues/3829