Google Espresso或Robotium

And*_*dme 114 testing android robotium android-testing android-espresso

我必须使用Automated UI测试工具,我对使用Robotium和Google Espresso感到困惑.

两者之间有哪些主要区别?是否存在一个但不存在的功能?

Val*_*rov 174

完全披露:我是Espresso的作者之一.

Espresso和Robotium都是基于检测的框架,这意味着他们使用Android Instrumentation检查被测活动并与之交互.

在谷歌,我们开始使用Robotium,因为它比股票工具更方便(因为这样做是为了让Robotium开发人员知道).但是,它不能满足我们对框架的需求,这使得开发人员可以轻松编写可靠的测试.

Espresso over Robotium的主要进展:

  1. 同步.默认情况下,检测测试逻辑在与UI操作(在UI线程上处理)不同的(检测)线程上运行.如果没有将测试操作与UI更新同步,测试将容易出现片状 - 即由于时序问题而随机失败.大多数测试作者忽略了这一事实,一些人添加了睡眠/重试机制,甚至更少实现更复杂的线程安全代码.这些都不是理想的.Espresso通过将测试操作和断言与被测应用程序的UI无缝同步来处理线程安全.Robotium试图通过睡眠/重试机制解决这个问题,这种机制不仅不可靠,而且还会导致测试运行速度慢于必要.

  2. API.Espresso有一个小的,定义明确且可预测的API,可以自定义.您告诉框架如何使用标准hamcrest匹配器定位UI元素,然后指示它执行操作或检查目标元素上的断言.您可以将其与Robotium的API进行对比,其中测试作者需要从30多种点击方法中进行选择.此外,Robotium暴露了危险的方法,如getCurrentActivity(当前意味着什么?)和getView,它允许你操作主线程之外的对象(参见上面的点).

  3. 清除故障信息.Espresso致力于在发生故障时提供丰富的调试信息.此外,您可以使用自己的故障处理程序自定义Espresso处理故障的方式.我有一段时间没有尝试过,但是Robotium的早期版本遭遇了不一致的故障处理(例如,clickOnView方法会吞下SecurityExceptions).

与之前的答案相反,所有具有大量用户的API版本都支持Espresso(请参阅:http://developer.android.com/about/dashboards/index.html).它适用于某些旧版本,但对这些版本进行测试会浪费资源.谈到测试... Espresso通过全面的测试套件(覆盖率超过95%)以及Google开发的大多数Android应用程序进行了每次更改测试.


Sni*_*las 9

Espresso比Robotium快得多,但仅适用于某些SDK版本.

因此,如果您想要一个适用于所有设备的测试,请访问Roboitum.如果没有,请去浓缩咖啡,不要忘记你还会成为一名beta测试者.

  • 上面的链接已更改,这是新的:https://google.github.io/android-testing-support-library/docs/espresso/index.html (2认同)