Android测试:UIAutomator vs Espresso

问题描述 投票:53回答:7

我正在寻找Android UI自动化的测试框架,我偶然发现了UI AutomatorEspresso,这是我感到困惑的部分 -

  1. 两者都由谷歌维护
  2. 两者都用于功能UI测试
  3. 两者都是Android唯一的框架

所以我的疑问/怀疑是 -

  • UI AutomatorEspresso之间的主要区别是什么?
  • 是否必须修改源代码以集成任何这些框架?
  • 一个框架是否比另一个框架具有任何优势?如果是,那么哪个框架最适合Android应用的UI自动化?
android android-espresso uiautomator android-uiautomator
7个回答
38
投票

UIAutomator - 功能强大,具有良好的外部OS系统集成,例如可以打开和关闭WiFi并在测试期间访问其他设置,但缺乏向后兼容性,因为它需要Jelly Bean或更高。但是,也缺乏详细的视图访问权限,所以可以说它可能更像是一个纯粹的黑盒测试。 Espresso可以访问内部视图(见下文)。这在developer.android.com上推荐用于“测试多个应用程序的UI”

Espresso - 与ui automator相比重量更轻,支持2.2 Froyo及以上它还具有流畅的api和强大的hamcrest(https://github.com/hamcrest)集成,使代码更具可读性和可扩展性(它比Ui automator更新)。它无权访问系统集成测试,但可以访问内部视图,例如可以测试webview(对于混合应用程序测试或webview重度测试很有用)。与UI Automator相比,灰盒测试稍微多一些。这在developer.android.com上推荐用于“测试单个应用程序的UI”。从Android Studio 2.2开始,它现在提供UI测试记录(如UIAutomator)


31
投票

实际上,你不需要选择。 UIAutomator和Espresso使用相同的仪器运行器,因此您可以在一次测试中使用来自两者的命令。 Espresso在UI上有各种匹配器,断言和操作,自动机没有:

Espresso Cheat Sheet

Espresso在单独的线程中运行,与其他测试框架相比,它真的很快。

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


11
投票

如果您只测试一个应用程序,那么Espresso。

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


5
投票

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

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


2
投票

使用UIAutomator时,您必须使用18+ API,而使用Espresso时,您可以使用API​​ 8。

正如Android文档所述,多应用程序测试应该使用UIAutomator完成,而如果您只想让测试在您自己的应用程序包中运行,则可以使用Espresso。

this documentation's page的底部,您可以找到介绍,以及这两种测试样式的示例。


2
投票

为了快速了解这两件事如何运作,让我们举个例子。让我们尝试使用UIAutomatorEspresso在Lollipop上找到并单击标题为“Start”的按钮:

  • UIAutomator:您必须搜索大写的“START”,因为Lollipop按钮呈现为大写。 device.findObject(new UiSelector().text("START")).click();
  • Espresso:你只需要使用R.string.start,而不需要关心平台实际呈现字符串的方式。你不关心视图是否有textAllCaps=true或它是椭圆化的。 onView(withText(R.string.start)).perform(click());

TL:DR;

UIAutomator以低于Espresso的低级样式搜索视图 - 通过Instrumentation机制并遍历视图层次结构的AccessibilityNodeInfo树。 Espresso轮流通常遍历视图层次结构本身。


1
投票

使用Espresso的一个主要好处是它提供了测试操作与您正在测试的应用程序的UI的自动同步。 Espresso检测主线程何时空闲,因此能够在适当的时间运行测试命令,从而提高测试的可靠性。此功能还使您无需在测试代码中添加任何计时解决方法,例如Thread.sleep()。

Espresso测试框架是一个基于仪器的API,可与AndroidJUnitRunner测试运行器配合使用。

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

© www.soinside.com 2019 - 2024. All rights reserved.