Androidtesting:UIAutomator vs Espresso

我正在为Android UI自动化寻求testing框架,我偶然发现了UI AutomatorEspresso ,这是我感到困惑的部分 –

  1. 两者都由Google维护
  2. 两者都用于function性UItesting
  3. 两者都是仅限Android框架

所以我的问题/怀疑在这里 –

  • UI AutomatorEspresso的主要区别是什么?
  • 是否必须修改源代码以集成这些框架?
  • 一个框架是否比另一个框架有优势? 如果是,那么哪个框架最适合Android应用程序的UI自动化?

UIAutomator – function强大,具有良好的外部操作系统集成,例如可以打开和closuresWiFi,并在testing期间访问其他设置,但缺乏向后兼容性,因为它需要Jelly Bean或更高版本。 但是,也缺乏详细的查看访问权限,所以可以说它可能更像是一个纯粹的黑盒testing。 Espresso可以查看内部信息(见下文)。 这是build议在developer.android.com“testing用户界面的多个应用程序”

Espresso – 与ui automator相比,重量更轻,支持2.2 Froyo,而且它还具有stream畅的api和强大的hamcrest( https://github.com/hamcrest )集成,使代码更具可读性和可扩展性(它比Ui automator)。 它无法访问系统集成testing,但可以查看内部结构,例如可以testingwebview(对混合应用程序testing或webview大量testing有用)。 与UI Automator相比稍微有点灰色testing。 build议在developer.android.com上“testing单个应用程序的UI”。 从Android Studio 2.2开始,它现在提供UItesting录制(如UIAutomator)

其实,你不需要select。 UIAutomator和Espresso使用相同的仪器运行程序,因此您可以在单个testing中使用来自两者的命令。 意式咖啡在UI上有各种各样的匹配,断言和动作,自动化不具有:

意式咖啡2.1备忘单

Espresso运行在单独的线程中,与其他testing框架相比,速度非常快。

作为总结:在你的testing中使用它们,Espresso是主要的,UIAutomator作为OS集成的附加工具。

如果你只testing一个应用程序,那么Espresso。

如果您正在testing多个应用程序或与其他应用程序或系统的集成,那么UiAutomator。

我发现了一篇有趣的文章,讲述了为什么你应该使用它们。 看一眼:

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

对于我来说, Espresso已经足够了,但是由于testing应用程序通知等原因,我会在几周内学习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

使用UIAutomator时,必须使用18+ API,而使用Espresso时,则可以低至API 8。

正如Android文档所述,多应用程序testing应该使用UIAutomator完成,而如果您只希望testing在您自己的应用程序包内运行,则可以使用Espresso。

在本文档页面的底部,您可以find这两种testing样式的介绍以及示例。

为了得到一个快速的概念,这两个东西的工作,让我们举个例子。 让我们尝试使用UIAutomatorEspresso在棒棒糖上find并点击标题为“开始”的button:

  • UIAutomator :你必须search大写的“开始”,因为棒棒糖button呈现为大写。 device.findObject(new UiSelector().text("START")).click();
  • 意式咖啡 :你只需要使用R.string.start ,而不需要关心string是如何被平台渲染的。 你不关心,如果视图有textAllCaps=true或者是椭圆化的。 onView(withText(R.string.start)).perform(click());

TL:DR;

UIAutomator以比Espresso更低级别的风格search视图 – 通过Instrumentation机制并遍历视图层次结构的AccessibilityNodeInfo树。 意大利咖啡通常会穿过视图层次本身。

使用Espresso的一个关键好处是,它提供了testing操作与您正在testing的应用程序的用户界面的自动同步。 Espresso检测主线程是否处于空闲状态,以便能够在适当的时候运行testing命令,从而提高testing的可靠性。 此function还可以减轻您在testing代码中添加任何计时变通方法(如Thread.sleep())的麻烦。

Espressotesting框架是一个基于工具的API,并与AndroidJUnitRunnertesting运行器一起工作。

来源: https : //developer.android.com/training/testing/ui-testing/espresso-testing.html