Android 测试: UIAutomator vs Espresso

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

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

所以我的疑问是

  • UI AutomatorEspresso之间的主要区别是什么?
  • 需要修改源代码来集成这些框架吗?
  • 一个框架相对于另一个框架有什么优势吗?如果是,那么哪个框架最适合 Android 应用程序的 UI 自动化?
28358 次浏览

如果您只测试一个应用程序,那么浓缩咖啡。

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

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

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

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

UiAutomator-功能强大,具有良好的外部操作系统集成,例如可以打开和关闭 WiFi,并在测试期间访问其他设置,但缺乏向下兼容,因为它需要果冻豆或更高。但是,也缺乏详细的视图访问,所以可以说它可能更多的是一个纯黑盒测试。当浓缩咖啡有访问视图内部(见下文)。此 developer.android.com 适用于「测试多个应用程式的用户界面」

Espresso-比 Ui 自动化程序重量轻一些,支持2.2 Froyo,它还有一个流畅的 api 和强大的 hamcrest (https://github.com/hamcrest)集成,使代码更易读、更易扩展(它比 UI 自动化程序更新)。它不能进行系统集成测试,但可以进行视图内部测试,例如可以测试一个 webview (对于混合应用测试或者 webview 重测试很有用)。与 UI Automator 相比,灰盒测试更多一些。对于“测试单个应用程序的用户界面”的 developer.android.com ,建议这样做。从 Android Studio 2.2开始,它现在提供 UI 测试记录(如 UIAutomator)

事实上,你不需要选择。UIAutomator 和 Espresso 使用相同的检测运行器,因此您可以在单个测试中使用来自它们的命令。 Espresso 在 UI 上有多种匹配器、断言和动作,而自动化程序没有:

意式咖啡小抄

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

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

我发现了一篇有趣的文章,谈到了为什么你应该同时使用它们:

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在棒棒糖上找到并单击一个标题为“ Start”的按钮:

  • UIAutomator : 你必须搜索大写的“ START”,因为在棒棒糖按钮是呈现大写。 FindObject (new UiSelector () . text (“ START”)) . click () ;
  • Espresso : 您只需要使用 R.string.start,不需要关心平台实际上如何呈现字符串。您不关心视图是否有 textAllCaps=true或者它是椭圆形的。 OnView (withText (R.string.start))

TL: DR;

UIAutomator 以低于 Espresso 的风格搜索视图——通过 Instruments 机制并遍历视图层次结构的 AccessibilityNodeInfo树。轮到浓缩咖啡时,它通常会遍历视图层次结构本身。

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

Espresso 测试框架是一个基于工具的 API,可以与 AndroidJUnitRunner 测试运行程序一起工作。

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