我需要使用自动化UI测试工具,但我在选择Robotium和Google Espresso之间感到困惑。
这两者之间的主要区别是什么?有没有一个工具拥有另一个工具所没有的功能?
我需要使用自动化UI测试工具,但我在选择Robotium和Google Espresso之间感到困惑。
这两者之间的主要区别是什么?有没有一个工具拥有另一个工具所没有的功能?
完全透明:我是Espresso的作者之一。
Espresso和Robotium都是基于仪器的框架,这意味着它们使用Android Instrumentation来检查和与被测试的活动交互。
在谷歌,我们最初使用Robotium,因为它比股票仪器更方便(向Robotium开发人员致敬,因为他们使其如此)。然而,它不能满足我们对一个使编写可靠测试变得容易的框架的需求。
Espresso相对于Robotium的主要进展:
同步。默认情况下,仪器测试逻辑在不同的线程上运行(仪器化线程),而UI操作在UI线程上处理。如果没有将测试操作与UI更新同步,那么测试将容易出现失败 - 即由于时间问题而随机失败。大多数测试作者忽略了这个事实,一些添加了sleep / retry机制,甚至更少的实现了更复杂的线程安全代码。这些都不是理想的。Espresso通过无缝地将测试操作和断言与应用程序的UI进行同步来处理线程安全。Robotium试图通过sleep/retry机制解决这个问题,这不仅不可靠,而且还使测试运行得比必要的慢。
API。Espresso具有小型、明确定义和可预测的API,可以进行定制。您告诉框架如何使用标准hamcrest matchers来定位UI元素,然后指示它在目标元素上执行操作或检查断言。您可以将此与Robotium的API进行对比,其中测试作者需要从30多个点击方法中选择。此外,Robotium公开了像getCurrentActivity(current到底是什么意思?)和getView这样危险的方法,允许您在主线程之外操作对象(请参见上面的观点)。
清晰的失败信息。Espresso 在出现故障时努力提供丰富的调试信息。此外,您可以使用自己的失败处理程序自定义 Espresso 处理故障的方式。我已经有一段时间没有尝试过它了,但在之前的版本中,Robotium 的失败处理不一致(例如,clickOnView 方法会吞下 SecurityExceptions)。
与先前的答案相反,Espresso 支持所有具有大量用户的 API 版本(请参见:http://developer.android.com/about/dashboards/index.html)。它适用于旧版本中的一些,但在这些版本上进行测试将是资源的浪费。说到测试... Espresso 通过全面的测试套件(覆盖率超过 95%)和由 Google 开发的大多数 Android 应用程序对每个更改进行测试。
Espresso比Robotium快得多,但只适用于某些SDK版本。
因此,如果您想要适用于所有设备的测试,请选择Roboitum。如果不是,请选择Espresso,并注意您将在一段时间内成为Beta测试人员。