Android测试:UIAutomator vs Espresso

Shi*_*har 57 android android-espresso android-uiautomator

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

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

所以我的疑问/怀疑是 -

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

Ste*_*ord 39

UIAutomator - 功能强大,具有良好的外部OS系统集成,例如可以在测试期间打开和关闭WiFi并访问其他设置,但缺乏向后兼容性,因为它需要Jelly Bean或更高版本.但是,也缺乏详细的视图访问权限,所以可以说它可能更像是一个纯粹的黑盒测试.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.例如espresso-web 2.2刚刚发布,它允许测试UI Automator不支持的webviews.浓缩咖啡似乎得到了更多的关注.请参阅https://code.google.com/p/android-test-kit/wiki/ReleaseNotes (2认同)

Dmi*_* Gr 35

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

Espresso 2.1备忘单

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

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

  • +1 提到您可以同时使用两者。即使您不在同一个测试用例中同时使用 UIAutomator 和 Espresso,您当然也可以在同一个套件的不同测试用例中同时使用它们。 (3认同)

Die*_*ano 12

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

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


pio*_*543 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


Win*_*der 5

为了快速了解这两件事是如何工作的,让我们举一个例子。让我们试着找到并使用点击一个按钮,标题为“开始”的棒棒糖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:博士;

UIAutomator 以比 Espresso 更低级别的样式搜索视图- 通过 Instrumentation 机制并遍历AccessibilityNodeInfo视图层次结构的树。轮到 Espresso 通常会遍历视图层次结构本身。