谷歌Espresso或Robotium

118

我需要使用自动化UI测试工具,但我在选择Robotium和Google Espresso之间感到困惑。

这两者之间的主要区别是什么?有没有一个工具拥有另一个工具所没有的功能?


20
我真的很讨厌人们在不写任何评论的情况下给我点踩。如果投票者能够写一些评论,解释一下为什么要这样做,我将不胜感激。 - Androidme
9
我认为这个问题非常有帮助。许多开发人员在自我提问这个问题。它们之间有什么区别?我认为问题出在你的提问方式上。你应该详细地提出问题,而不是只问要使用哪一个。 - tasomaniac
8
这正是我希望得到的答案。感谢您的发布。 - Richard Fung
8
我不喜欢这个问题因为它在StackOverflow上算是离题了。我知道如果我们要比较每一个库和工具,那可能会有很多基于个人观点的回答,但像这样询问两个资源之间的差异的问题非常有帮助。 - Andrea Thacker
2个回答

177

完全透明:我是Espresso的作者之一。

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

在谷歌,我们最初使用Robotium,因为它比股票仪器更方便(向Robotium开发人员致敬,因为他们使其如此)。然而,它不能满足我们对一个使编写可靠测试变得容易的框架的需求。

Espresso相对于Robotium的主要进展:

  1. 同步。默认情况下,仪器测试逻辑在不同的线程上运行(仪器化线程),而UI操作在UI线程上处理。如果没有将测试操作与UI更新同步,那么测试将容易出现失败 - 即由于时间问题而随机失败。大多数测试作者忽略了这个事实,一些添加了sleep / retry机制,甚至更少的实现了更复杂的线程安全代码。这些都不是理想的。Espresso通过无缝地将测试操作和断言与应用程序的UI进行同步来处理线程安全。Robotium试图通过sleep/retry机制解决这个问题,这不仅不可靠,而且还使测试运行得比必要的慢。

  2. 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是否提供在同一个测试用例中测试多个应用程序的可能性?我需要测试我的应用程序调用另一个应用程序的活动(我的其他应用程序共享相同的sharedUserId),然后检索结果。我无法使用Robotium做到这一点,但也许可以用Espresso?:-) - nbe_42
    1
    不,你不能通过Espresso与你的进程外的UI交互。这是仪器化框架的限制。 - ValeraZakharov
    1
    @ValeraZakharov:: 你好!正如你所说,Espresso会处理UI线程同步,不需要使用Sleep。但在我的情况下,我编写了一些测试用例,并且所有的测试用例都在我的本地机器上运行(每个TestSuite开始时有一个Sleep)。但是当我在本地/服务器Jenkins上运行时,几乎99%的测试用例都失败了。我已经在Jenkins模拟器中禁用了所有动画。大多数时间我都会遇到AppNotIdleException。我无法找出根本原因。你能帮我解决这个问题吗? - Naresh Gunda
    @Radu已经完成了。你的评论是空洞的,没有适当的解释,看起来像是一种鲁莽的尝试来引起注意。 - user2453382

    9

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

    因此,如果您想要适用于所有设备的测试,请选择Roboitum。如果不是,请选择Espresso,并注意您将在一段时间内成为Beta测试人员。


    一个赞可以帮助我为这个标签创建一个同义词.. ;) - Snicolas
    2
    链接已更改,这是新链接:https://google.github.io/android-testing-support-library/docs/espresso/index.html - Evin1_

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接