Android Testing: UIAutomator vs Espresso



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

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

所以我的问题/疑虑在这里-

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

实际上,您不需要进行选择。UIAutomator和Espresso使用相同的仪器运行程序,因此您可以在一次测试中使用这两个工具的命令。Espresso在UI上有各种匹配器、断言和操作,这是自动售货机所没有的:

浓缩咖啡备忘单

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

总结:在测试中同时使用这两种工具,Espresso是主要工具,UIAutomator是操作系统集成的附加工具。

UIAutomator功能强大,具有良好的外部操作系统集成,例如可以在测试期间打开和关闭WiFi并访问其他设置,但缺乏向后兼容性,因为它需要果冻豆或更高版本。但是,也缺乏详细的视图访问,因此可以说这可能更像是一个纯粹的黑盒测试。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)

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

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

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

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

Espresso对我来说已经足够了,但由于一些原因,比如测试应用程序通知,我会在几周内学习uiautomator

花点时间进行

  • 查看谷歌使用这些框架的示例:

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

要快速了解这两种方法的工作原理,让我们举一个例子。让我们尝试使用UIAutomatorEspresso:在棒棒糖上找到并单击标题为"开始"的按钮

  • UI Automator:你必须搜索大写的"START",因为在棒棒糖上按钮是大写的。 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的级别样式搜索视图。意式浓缩咖啡通常会遍历视图层次结构本身。

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

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

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

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

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

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

最新更新