Android测试:UIAutomator vs Espresso

时间:2015-06-26 14:51:31

标签: android android-espresso uiautomator android-uiautomator

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

  1. 两者均由Google维护
  2. 两者都用于功能性UI测试
  3. 两者都只是Android框架
  4. 所以我的疑问/怀疑是 -

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

7 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:31)

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

Espresso Cheat Sheet

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

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

答案 2 :(得分:11)

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

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

答案 3 :(得分: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

答案 4 :(得分:2)

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

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

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

答案 5 :(得分:2)

为了快速了解这两件事如何运作,让我们举个例子。让我们尝试查找并单击标题为"开始"的按钮。在棒棒糖上使用UIAutomatorEspresso

  • 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轮流通常遍历视图层次结构。

答案 6 :(得分:1)

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

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

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