Androidtesting:UIAutomator vs Espresso
我正在为Android UI自动化寻求testing框架,我偶然发现了UI Automator
和Espresso
,这是我感到困惑的部分 –
- 两者都由Google维护
- 两者都用于function性UItesting
- 两者都是仅限
Android
框架
所以我的问题/怀疑在这里 –
-
UI Automator
和Espresso
的主要区别是什么? - 是否必须修改源代码以集成这些框架?
- 一个框架是否比另一个框架有优势? 如果是,那么哪个框架最适合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样式的介绍以及示例。
为了得到一个快速的概念,这两个东西的工作,让我们举个例子。 让我们尝试使用UIAutomator
和Espresso
在棒棒糖上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