Android测试:UIAutomator与Espresso


71

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

  1. 两者均由Google维护
  2. 两者都用于功能UI测试
  3. 两者都是Android框架

所以我的问题/疑问是-

  • UI Automator和之间的主要区别是Espresso什么?
  • 是否需要修改源代码以集成任何这些框架?
  • 一个框架比另一个框架具有任何优势吗?如果是,那么哪个框架最适合Android应用程序的UI自动化?

Answers:


46

实际上,您不需要选择。UIAutomator和Espresso使用相同的工具运行器,因此您可以在单个测试中使用这两个命令。Espresso在UI上具有多种匹配器,断言和操作,而automator没有:

咖啡速查表

Espresso在单独的线程中运行,与其他测试框架相比,它确实非常快。

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


3
+1值得一提的是,您可以同时使用两者。即使您不在同一测试用例中同时使用UIAutomator和Espresso,也可以在同一套件的不同测试用例中同时使用它们。
法学徒

42

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

Espresso-与ui automator相比,重量轻一点,并且支持2.2 Froyo,并且它还具有流利的api和强大的hamcrest(https://github.com/hamcrest)集成,使代码更具可读性和可扩展性(比ui自动化器)。它无权访问系统集成测试,但有权查看内部视图,例如可以测试Web视图(对于混合应用程序测试或WebView繁重测试很有用)。与UI Automator相比,灰盒测试略多。建议在developer.android.com上使用“测试单个应用程序的UI”。从Android Studio 2.2开始,它现在提供UI测试记录(如UIAutomator)


1
最低的API级别支持不是问题,但是假设我在测试期间不需要任何系统集成,那么使用UIAutomator自身无法实现相同的功能吗?
Shikhar

2
不。如果您不测试系统/跨应用程序,我个人会选择Espresso。例如espresso-web 2.2刚刚发布,它可以测试UI Automator不支持的webview。Espresso似乎引起了更多功能关注。参见code.google.com/p/android-test-kit/wiki/ReleaseNotes
Steven Mark Ford

15

如果您仅测试一个应用程序,则使用Espresso。

如果要测试多个应用程序或其与其他应用程序或系统的集成,请使用UiAutomator。


1
我可能需要与系统的应用集成测试,但组合UIAutomatorEspresso可能吗?
Shikhar

1
是的,两者都可以使用
Diego Torres Milano 2015年

9

我找到了一篇有趣的文章,其中谈到了为什么您应该同时使用它们。看一眼:

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


4

为了快速了解两者的工作原理,我们举个例子。让我们尝试使用UIAutomator和在Lollipop上查找并单击标题为“开始”的按钮Espresso

  • 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通过Instrumentation机制并遍历AccessibilityNodeInfo视图层次结构树,以比Espresso更低级别的样式搜索视图。浓咖啡通常会遍历视图层次结构本身。


3

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

如Android文档所述,应使用UIAutomator进行多应用程序测试,而如果您仅希望测试在自己的应用程序包中运行,则可以使用Espresso。

本文档页面的底部,您可以找到介绍以及这两种测试样式的示例。


最低的API级别支持不是问题,但是是否可以安全地假设Espresso必须修改被测应用的源代码?
Shikhar

2

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

Espresso测试框架是基于工具的API,可与AndroidJUnitRunner测试运行器一起使用。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.