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