我正在寻找Android UI自动化的测试框架,我偶然发现UI Automator
和Espresso
,这是我感到困惑的部分 -
Android
框架所以我的疑问/怀疑是 -
UI Automator
和Espresso
之间的主要区别是什么?答案 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在单独的线程中运行,与其他测试框架相比,它真的很快。
总结:在测试中使用它们,Espresso是主要的,UIAutomator是OS集成的附加工具。
答案 2 :(得分:11)
如果您只测试一个应用程序,那么Espresso。
如果您正在测试多个应用程序或与其他应用程序或系统集成,那么UiAutomator。
答案 3 :(得分:5)
我找到了一篇有趣的文章,讲述了为什么你应该同时使用它们。看看:
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
答案 4 :(得分:2)
使用UIAutomator时,您必须使用18+ API,而使用Espresso时,您可以使用API 8。
正如Android文档所述,多应用程序测试应该使用UIAutomator完成,而如果您只想让测试在您自己的应用程序包中运行,则可以使用Espresso。
在this documentation's page的底部,您可以找到介绍,以及这两种测试样式的示例。
答案 5 :(得分:2)
为了快速了解这两件事如何运作,让我们举个例子。让我们尝试查找并单击标题为"开始"的按钮。在棒棒糖上使用UIAutomator
和Espresso
:
device.findObject(new UiSelector().text("START")).click();
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