Google Espresso或Robotium [已关闭]


115

我必须使用自动UI测试工具,而在使用Robotium和Google Espresso之间却感到困惑。

两者之间的主要区别是什么?一个功能中是否存在其他功能?


19
老实说,我讨厌人们投反对票而没有发表任何评论。如果
不满意

8
我认为这个问题很有帮助。许多开发人员都在问这个问题。有什么区别?我认为问题在于您的询问方式。您应该更详细地询问它,而不仅仅是询问使用哪个。
tasomaniac

8
这是我想回答的确切问题。感谢您的发布
冯检基

8
我不喜欢这样的事实,根据StackOverflow,这是不合时宜的。我知道,如果我们必须比较每个单独的库和工具,可能会有很多基于意见的答案,但是这样的问题要求两种资源之间的差异非常有用。
David Argyle Thacker

Answers:


175

全面披露:我是Espresso的作者之一。

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

在Google,我们从使用Robotium开始,因为它比股票工具更方便(这要由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应用程序的测试。


嗨!感谢您的回答,Espresso是否可以在同一测试用例中测试多个应用程序?我必须测试我的应用程序,该应用程序从另一个应用程序(共享相同的sharedUserId的另一个应用程序)调用活动,然后检索结果。我不能用Robotium做到这一点,但是也许可以用Espresso吗?:-)
nbe_42

1
否-您无法在Espresso的过程之外与UI进行交互。这是仪器框架的局限性。
ValeraZakharov 2014年

1
@ValeraZakharov ::嗨... !! 如您所说,espresso将负责UI线程同步,而无需放置Sleeps。但就我而言,我只编写了几个测试用例,所有测试用例都在本地计算机上工作(以每个TestSuite一次睡眠为开始)。但是当我使用本地/服务器jenkins运行时,几乎99%的测试用例都失败了。我已经禁用了詹金斯模拟器中的所有动画。大多数时候,我会收到AppNotIdleException。我无法找出根本原因。你能帮我吗
Naresh Gunda

@Radu已经做到了。您的评论为空,没有适当的解释,这似乎是一种引起关注的愚蠢尝试。
拉基布

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.