我正在寻找用于Android UI自动化测试的测试框架,偶然发现了 UI Automator
和 Espresso
,让我感到疑惑的是 -
- 两个框架都由Google维护
- 两个框架都用于功能性UI测试
- 两个框架都是仅限于Android平台的
因此,我的问题/疑问是 -
UI Automator
和Espresso
之间的主要区别是什么?- 是否需要修改源代码来集成这些框架中的任何一个?
- 这两个框架中的一个是否具有优势? 如果有,那么哪个框架最适合用于Android应用程序的UI自动化?
我正在寻找用于Android UI自动化测试的测试框架,偶然发现了 UI Automator
和 Espresso
,让我感到疑惑的是 -
因此,我的问题/疑问是 -
UI Automator
和 Espresso
之间的主要区别是什么?其实,你不需要做出选择。UIAutomator和Espresso使用相同的仪器运行程序,因此你可以在单个测试中使用它们两者的命令。 Espresso有各种匹配器、断言和UI操作,而Automator没有:
Espresso在单独的线程中运行,并且与其他测试框架相比速度非常快。
总结:在你的测试中同时使用它们两个,Espresso是主要工具,UIAutomator是用于操作系统集成的附加工具。
UIAutomator - 强大且具有良好的外部操作系统集成,例如可以在测试期间打开和关闭WiFi并访问其他设置,但缺乏向后兼容性,因为它需要Jelly Bean或更高版本。但是,它也缺乏详细的视图访问权限,因此可以说它可能更像一个纯黑盒测试。而Espresso可以访问视图内部(见下文)。开发者.android.com建议在“多应用程序测试UI”中使用。
Espresso - 与ui automator相比较轻量级,并支持2.2 Froyo及更高版本,它还具有流畅的API和强大的hamcrest(https://github.com/hamcrest) 集成,使代码更易读和可扩展(相对于Ui automator而言,它更新一些)。它没有访问系统集成测试的权限,但可以访问视图内部,例如可以测试Webview(对混合应用程序测试或Webview重度测试很有用)。相对于UI Automator,略微更灰盒测试。开发者.android.com建议在“单个应用程序测试UI”中使用。从Android Studio 2.2开始,现在提供UI测试记录(类似于UIAutomator)。
UIAutomator
本身实现? - ShikharUIAutomator
和 Espresso
的组合是否可行? - Shikhar我发现了一篇有趣的文章,介绍了为什么你应该同时使用它们。看一下:
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
device.findObject(new UiSelector().text("START")).click();
R.string.start
,无需关心平台如何实际呈现该字符串。您不需要关心视图是否具有textAllCaps=true
或其是否被省略。
onView(withText(R.string.start)).perform(click());
TL:DR;
UIAutomator以比Espresso更低级别的样式搜索视图 - 通过仪器机制和遍历视图层次结构的AccessibilityNodeInfo
树来遍历。而Espresso通常会自己遍历视图层次结构。
Espresso
的情况下,假设被测试应用程序的源代码必须被修改,这是否是一个安全的假设? - Shikhar