我正在寻求适用于Android的UI自动化测试框架,我偶然发现了UI Automator
和Espresso
,这是我感到困惑的部分-
- 两者均由Google维护
- 两者都用于功能UI测试
- 两者都是
Android
框架
所以我的问题/疑问是-
UI Automator
和之间的主要区别是Espresso
什么?- 是否需要修改源代码以集成任何这些框架?
- 一个框架比另一个框架具有任何优势吗?如果是,那么哪个框架最适合Android应用程序的UI自动化?
Answers:
UIAutomator –功能强大,并且具有良好的外部OS系统集成,例如,可以在测试期间打开和关闭WiFi并访问其他设置,但由于需要Jelly Bean或更高版本,因此缺乏向后兼容性。但是,它也缺乏详细的视图访问权限,因此可以说它可能更像是一种纯黑盒测试。Espresso可以访问内部视图(请参阅下文)。建议在developer.android.com上使用“测试多个应用程序的UI”
Espresso-与ui automator相比,重量轻一点,并且支持2.2 Froyo,并且它还具有流利的api和强大的hamcrest(https://github.com/hamcrest)集成,使代码更具可读性和可扩展性(比ui自动化器)。它无权访问系统集成测试,但有权查看内部视图,例如可以测试Web视图(对于混合应用程序测试或WebView繁重测试很有用)。与UI Automator相比,灰盒测试略多。建议在developer.android.com上使用“测试单个应用程序的UI”。从Android Studio 2.2开始,它现在提供UI测试记录(如UIAutomator)
UIAutomator
自身无法实现相同的功能吗?
如果您仅测试一个应用程序,则使用Espresso。
如果要测试多个应用程序或其与其他应用程序或系统的集成,请使用UiAutomator。
UIAutomator
和Espresso
可能吗?
我找到了一篇有趣的文章,其中谈到了为什么您应该同时使用它们。看一眼:
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
为了快速了解两者的工作原理,我们举个例子。让我们尝试使用UIAutomator
和在Lollipop上查找并单击标题为“开始”的按钮Espresso
:
device.findObject(new UiSelector().text("START")).click();
R.string.start
需要使用,而不必关心平台实际如何渲染字符串。您不在乎视图是否具有textAllCaps=true
椭圆形。
onView(withText(R.string.start)).perform(click());
TL:DR;
UIAutomator通过Instrumentation机制并遍历AccessibilityNodeInfo
视图层次结构树,以比Espresso更低级别的样式搜索视图。浓咖啡通常会遍历视图层次结构本身。
使用Espresso的主要好处是,它可以将测试操作与您正在测试的应用程序的UI自动同步。Espresso会检测主线程何时处于空闲状态,因此它可以在适当的时间运行测试命令,从而提高测试的可靠性。此功能还使您不必在测试代码中添加任何计时解决方法,例如Thread.sleep()。
Espresso测试框架是基于工具的API,可与AndroidJUnitRunner测试运行器一起使用。
来源:https : //developer.android.com/training/testing/ui-testing/espresso-testing.html