Android UIの自動化のためのテストフレームワークを探していましたが、UI Automator
とEspresso
を見つけましたが、これは私が混乱している部分です-
Android
のみのフレームワークですだから私の質問/疑問はここにあります-
UI Automator
とEspresso
の主な違いは何ですか?UIAutomator –強力で、外部OSシステムとの統合が良好です。テスト中にWiFiのオンとオフを切り替えたり、他の設定にアクセスしたりできますが、Jelly Bean以上が必要なため、下位互換性はありません。しかし、詳細なビューへのアクセスも不足しているため、より純粋なブラックボックステストの可能性があります。 Espressoが内部を表示するためにアクセスできる場所(以下を参照)。これは、「複数のアプリのUIをテストする」ためにdeveloper.Android.comで推奨されています
Espresso-ui automatorに比べて少し軽量で、2.2 Froyoをサポートし、強力なhamcrest( https://github.com/hamcrest )統合によりコードが読みやすくなりました拡張可能(Uiオートマトンよりも新しい)。システム統合テストにアクセスすることはできませんが、内部を表示することはできます。 WebViewをテストできます(Hybridアプリのテスト、またはWebViewの重いテストに役立ちます)。 UI Automatorと比較して、グレーボックステストが少し多くなっています。これは、「単一アプリのUIのテスト」のためにdeveloper.Android.comで推奨されています。 Android Studio 2.2では、UIAutomatorのようなUIテストの記録が可能になりました)
実際、選択する必要はありません。 UIAutomatorとEspressoは同じインスツルメンテーションランナーを使用するため、1つのテストで両方のコマンドを使用できます。 Espressoには、UIにさまざまなマッチャー、アサーション、およびアクションがありますが、オートマトンにはありません。
Espressoは別のスレッドで実行されており、他のテストフレームワークと比較して非常に高速です。
要約:テストで両方を使用します。Espressoはメインであり、OS統合の追加ツールとしてUIAutomatorです。
1つのアプリケーションのみをテストしている場合、Espresso。
複数のアプリケーションまたは他のアプリケーションまたはシステムとの統合をテストしている場合、UiAutomator。
なぜ両方を使用する必要があるのかを説明する興味深い記事を見つけました。を見てみましょう:
http://qathread.blogspot.com/2015/05/espresso-uiautomator-perfect-tandem.html
すでにEspresso
で十分ですが、アプリ通知のテストなどのいくつかの理由で、ほんの数週間でuiautomator
を学習します。
少し時間を
https://github.com/googlesamples/Android-testing/tree/master/ui
http://developer.Android.com/training/testing/ui-testing/espresso-testing.html
http://developer.Android.com/training/testing/ui-testing/uiautomator-testing.html
両方がどのように機能するかを簡単に理解するために、例を挙げましょう。 UIAutomator
とEspresso
を使用して、Lollipopでタイトル「Start」のボタンを見つけてクリックしてみましょう。
device.findObject(new UiSelector().text("START")).click();
R.string.start
_を使用するだけで、プラットフォームによって文字列が実際にレンダリングされる方法を気にする必要はありません。ビューに_textAllCaps=true
_が含まれているか、省略されているかは気にしません。 onView(withText(R.string.start)).perform(click());
TL:DR;
IAutomatorはEspressoよりも低レベルのスタイルでビューを検索します-Instrumentationメカニズムを介して、ビュー階層のAccessibilityNodeInfo
ツリーを走査します。エスプレッソは通常、ビュー階層自体を横断します。
UIAutomatorを使用する場合、18以上のAPIを使用する必要がありますが、Espressoを使用する場合は、API 8まで低くすることができます。
Androidのドキュメントにあるように、マルチアプリケーションテストはUIAutomatorで実行する必要がありますが、テストを独自のアプリパッケージ内でのみ実行する場合は、Espressoを使用できます。
このドキュメントのページ の下部に、これらの両方のテストスタイルの紹介と例があります。
Espressoを使用する主な利点は、テストアクションとテスト対象のアプリのUIを自動的に同期できることです。 Espressoはメインスレッドがアイドル状態にあることを検出するため、適切なタイミングでテストコマンドを実行できるため、テストの信頼性が向上します。この機能により、テストコードにThread.sleep()などのタイミング回避策を追加する必要もなくなります。
Espressoテストフレームワークは、インストルメンテーションベースのAPIであり、AndroidJUnitRunnerテストランナーと連携します。
ソース: https://developer.Android.com/training/testing/ui-testing/espresso-testing.html