web-dev-qa-db-ja.com

Androidテスト:UIAutomator対Espresso

Android UIの自動化のためのテストフレームワークを探していましたが、UI AutomatorEspressoを見つけましたが、これは私が混乱している部分です-

  1. どちらもGoogleが管理しています
  2. どちらも機能的なUIテストに使用されます
  3. 両方ともAndroidのみのフレームワークです

だから私の質問/疑問はここにあります-

  • UI AutomatorEspressoの主な違いは何ですか?
  • これらのフレームワークのいずれかを統合するには、ソースコードを変更する必要がありますか?
  • 1つのフレームワークは他のフレームワークよりも有利ですか? 「はい」の場合、どのフレームワークがAndroidアプリのUI自動化に最も適していますか?
56
Shikhar

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テストの記録が可能になりました)

38

実際、選択する必要はありません。 UIAutomatorとEspressoは同じインスツルメンテーションランナーを使用するため、1つのテストで両方のコマンドを使用できます。 Espressoには、UIにさまざまなマッチャー、アサーション、およびアクションがありますが、オートマトンにはありません。

エスプレッソチートシート

Espressoは別のスレッドで実行されており、他のテストフレームワークと比較して非常に高速です。

要約:テストで両方を使用します。Espressoはメインであり、OS統合の追加ツールとしてUIAutomatorです。

31
Dmitry Gr

1つのアプリケーションのみをテストしている場合、Espresso。

複数のアプリケーションまたは他のアプリケーションまたはシステムとの統合をテストしている場合、UiAutomator。

11

なぜ両方を使用する必要があるのか​​を説明する興味深い記事を見つけました。を見てみましょう:

http://qathread.blogspot.com/2015/05/espresso-uiautomator-perfect-tandem.html

すでにEspressoで十分ですが、アプリ通知のテストなどのいくつかの理由で、ほんの数週間でuiautomatorを学習します。

少し時間を

  • これらのフレームワークの使用に関するGoogleの例を確認してください。

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

5
piotrek1543

両方がどのように機能するかを簡単に理解するために、例を挙げましょう。 UIAutomatorEspressoを使用して、Lollipopでタイトル「Start」のボタンを見つけてクリックしてみましょう。

  • IAutomator:Lollipopではボタンが大文字で表示されるため、大文字の「START」を検索する必要があります。 device.findObject(new UiSelector().text("START")).click();
  • Espresso:_R.string.start_を使用するだけで、プラットフォームによって文字列が実際にレンダリングされる方法を気にする必要はありません。ビューに_textAllCaps=true_が含まれているか、省略されているかは気にしません。 onView(withText(R.string.start)).perform(click());

TL:DR;

IAutomatorはEspressoよりも低レベルのスタイルでビューを検索します-Instrumentationメカニズムを介して、ビュー階層のAccessibilityNodeInfoツリーを走査します。エスプレッソは通常、ビュー階層自体を横断します。

3
WindRider

UIAutomatorを使用する場合、18以上のAPIを使用する必要がありますが、Espressoを使用する場合は、API 8まで低くすることができます。

Androidのドキュメントにあるように、マルチアプリケーションテストはUIAutomatorで実行する必要がありますが、テストを独自のアプリパッケージ内でのみ実行する場合は、Espressoを使用できます。

このドキュメントのページ の下部に、これらの両方のテストスタイルの紹介と例があります。

2
Simas

Espressoを使用する主な利点は、テストアクションとテスト対象のアプリのUIを自動的に同期できることです。 Espressoはメインスレッドがアイドル状態にあることを検出するため、適切なタイミングでテストコマンドを実行できるため、テストの信頼性が向上します。この機能により、テストコードにThread.sleep()などのタイミング回避策を追加する必要もなくなります。

Espressoテストフレームワークは、インストルメンテーションベースのAPIであり、AndroidJUnitRunnerテストランナーと連携します。

ソース: https://developer.Android.com/training/testing/ui-testing/espresso-testing.html

1
phq