- 首页
- /
- Appium vs Espresso
Appium vs Espresso
Appium 和 Espresso 是自动化 Android UI 测试的两种主流方式。Appium 是一个基于 W3C WebDriver 协议的跨平台、黑盒框架;Espresso 是 Google 推出的快速、白盒框架,仅适用于 Android。本指南将对它们进行全面比较,并提供代码示例和结论,让您在五分钟内即可付诸行动。
- 浏览器和设备
- 6100+
- 云并行
- 100×
- 正常运行时间服务级别协议
- 99.99%
被世界上一些最具创新性的公司所信任
你应该选哪一个?
您希望使用一套测试套件同时在 Android 和 iOS 上运行,您的团队使用 Java、Python、JavaScript、Ruby 或 C# 工作,或者您测试的应用无法通过插桩重新构建。
您仅测试 Android,您拥有应用源代码,并且您希望获得最快、最不易出错的 UI 测试以及自动同步,使用 Kotlin 或 Java 与您的应用一同编写。
您使用 Espresso 进行快速的仅 Android 组件和 UI 测试,并使用 Appium 实现跨平台的端到端覆盖。TestingBot 可以在同一个真实设备网格上并行运行两者。
Appium 和 Espresso 是什么?
两种设计相反的移动 UI 自动化框架。一个是跨平台和黑盒的,另一个是 Android 原生和白盒的。
Appium
发布于 2012 年 · OpenJS Foundation · Apache 2.0
Appium 是一个开源的跨平台测试框架,适用于原生、混合和移动 Web 应用。它实现了 W3C WebDriver 协议,因此同一个客户端库可以使用 Java、Python、Node.js、Ruby、C# 等语言同时驱动 iOS 和 Android。
Appium 以黑盒方式从外部驱动应用,因此它不需要应用源代码。在 Android 上,它在底层使用 UiAutomator2 或 Espresso 驱动程序;在 iOS 上,它使用 XCUITest。正是这一层使得一个测试可以跨平台复用。
- Java / Python / Node.js / Ruby / C# / PHP
- 跨平台,原生、混合和移动 Web
- 黑盒,无需应用源代码
Espresso
发布于 2013 年 · Google · Apache 2.0
Espresso 是 Google 为 Android 推出的 UI 测试框架,属于 Android Jetpack 测试库的一部分。测试在设备上进程内运行,与被测应用处于同一进程中,这使它能够直接访问应用并与 UI 线程自动同步。
由于 Espresso 在应用进程内运行,它速度快且可靠,几乎不会出现不稳定的情况。其权衡之处在于:它仅适用于 Android,使用 Kotlin 或 Java 编写,并且需要应用的插桩构建。
- Kotlin 和 Java
- 进程内,自动 UI 同步
- 仅限 Android · 需要插桩构建
Appium 与 Espresso:并排比较
在 Android UI 测试和跨平台覆盖方面需要考虑的各个重要维度。
| 方面 |
|
|
|---|---|---|
| First release | 2012 | 2013 |
| Maintained by | Open source (OpenJS Foundation) | |
| Platforms | iOS + Android | Android only |
| Languages | Java, Python, JS, Ruby, C#, PHP | Java, Kotlin |
| Protocol | W3C WebDriver | Android instrumentation |
| Test execution | Out-of-process (black-box) | In-process (white-box) |
| Speed | Slower (WebDriver round-trips) | Very fast (in-process) |
| App source needed | No (black-box) | Yes (instrumented build) |
| UI synchronization | Manual waits | Automatic, built in |
| Cross-platform reuse | Same test on iOS + Android | Android only |
| Web / hybrid apps | Yes | Limited |
| Flakiness | Good | Excellent (tight coupling) |
| On TestingBot | Upload app, WebDriver hub | Upload app + test, CLI |
| Free for open source on TestingBot | ✓ | ✓ |
两者均运行在 TestingBot 的真实 Android 设备和模拟器上。Appium 使用上传的应用连接到 WebDriver hub;Espresso 通过 TestingBot CLI 运行。
在 Android 上登录
由 Appium 以黑盒方式驱动、由 Espresso 以白盒方式驱动的登录流程。两者均在 TestingBot 上同一批真实 Android 设备上运行。
# real Android device on TestingBot from appium import webdriver from appium.options.android import UiAutomator2Options from appium.webdriver.common.appiumby import AppiumBy opts = UiAutomator2Options().load_capabilities({ 'platformName': 'Android', 'appium:app': 'tb://APP_ID', 'tb:options': { 'realDevice': True }, }) d = webdriver.Remote('https://hub.testingbot.com/wd/hub', options=opts) d.find_element(AppiumBy.ACCESSIBILITY_ID, 'username').send_keys('jane') d.find_element(AppiumBy.ACCESSIBILITY_ID, 'sign_in').click() assert d.find_element(AppiumBy.ID, 'welcome').is_displayed()
// runs via the TestingBot CLI @Test fun loginRedirectsToDashboard() { onView(withId(R.id.username)) .perform(typeText("jane@example.com")) onView(withId(R.id.password)) .perform(typeText("secret")) onView(withId(R.id.sign_in)) .perform(click()) onView(withId(R.id.welcome)) .check(matches(isDisplayed())) }
Appium 测试使用上传的应用连接到 WebDriver hub;Espresso 套件通过 TestingBot CLI 运行。两者都在真实 Android 设备上运行。
何时选择哪个
选择 Appium 时
- 您需要一套测试套件无需重写即可同时在 Android 和 iOS 上运行。
- 您的团队使用 Java、Python、JavaScript、Ruby 或 C# 编写代码,而非 Kotlin。
- 您测试的应用无法通过插桩重新构建,或者是第三方或混合应用。
- 您已经在使用 Selenium 或 WebDriver,并希望在移动端使用相同的协议。
- 您使用一个工具测试原生、混合和移动 Web 流程。
选择 Espresso 时
- 您仅测试 Android 并拥有应用源代码,因此插桩构建没有问题。
- 您希望获得最快、最不易出错的 UI 测试以及自动同步。
- 您的团队使用 Kotlin 或 Java 编写代码,并希望测试与应用代码放在一起。
- 您测试内部应用状态、自定义视图或组件,而不仅仅是公开的 UI。
- 您从第一天起就将 UI 测试作为 Android 构建和 CI 的一部分运行。
停止选择,在同一网格上运行两者
上传您的应用并通过 WebDriver hub 使用 Appium 以黑盒方式驱动它,或者通过 TestingBot CLI 运行您的 Espresso 套件。两者都在同一批真实 Android 设备上运行,使用相同的仪表板、并行槽位、视频录制和欧盟数据驻留。
- 真实的 Android 设备和模拟器
- 两个框架的并排测试历史记录
- 免费开源,这两个框架都是如此
--device "Galaxy S24" --real-device
常见问题解答
团队在选择(或组合)这些框架之前会提出的问题。
Espresso 比 Appium 快吗?
是的,在 Android 上如此。Espresso 进程内运行,与应用处于同一进程中,因此它避免了 Appium WebDriver 协议的网络往返,并与 UI 线程自动同步。这使得 Espresso 更快且更不易出错。其权衡之处在于,Espresso 仅适用于 Android 并且需要插桩构建,而 Appium 以黑盒方式在 Android 和 iOS 上运行相同的测试。
在 Android 上我应该使用 Appium 还是 Espresso?
这取决于您的目标。对于您拥有源代码的仅 Android UI 测试,Espresso 提供最快、最可靠的运行。对于跨平台覆盖、使用非 Kotlin 语言编写的测试,或者您无法插桩的应用,Appium 是更合适的选择。许多 Android 团队使用 Espresso 进行组件和 UI 测试,使用 Appium 进行跨平台的端到端流程。
Espresso 可以测试 iOS 应用吗?
不可以。Espresso 是 Google 推出的仅适用于 Android 的框架。要测试 iOS,您需要 XCUITest(Apple 的原生框架)或 Appium,后者在底层通过 XCUITest 驱动 iOS。Appium 是其中唯一能在两个平台上运行相同测试的工具。TestingBot 可在真实设备上运行所有这些工具。
我可以在 Android 和 iOS 上复用相同的测试吗?
使用 Appium 可以。由于 Appium 实现了 W3C WebDriver 协议并抽象了原生驱动程序(Android 上的 UiAutomator2 或 Espresso,iOS 上的 XCUITest),单个测试只需进行少量能力变更即可针对两个平台。Espresso 无法做到这一点;它仅适用于 Android。如果跨平台复用很重要,那么 Appium 是值得选择的框架。
Espresso 需要应用源代码吗?
是的。Espresso 编译成一个与您的应用一同运行的插桩测试 APK,因此您需要应用源代码,或者至少是一个可调试的插桩构建。Appium 以黑盒方式驱动已安装的应用,无需源代码,这就是为什么它可以测试 Espresso 无法测试的第三方或已发布的应用。
我可以在云端的真实设备上运行 Appium 和 Espresso 吗?
可以。TestingBot 在欧盟数据中心提供真实的 Android 手机和平板电脑以及模拟器。Appium 测试将您的 .apk 上传到 TestingBot Storage,并在设置了 realDevice 的情况下针对 hub 运行;Espresso 测试通过 TestingBot CLI 上传应用和测试 APK。两者都会录制视频和日志,您可以在仪表板中查看。
我可以在 TestingBot 上运行 Appium 和 Espresso 吗?
是的,两者都运行在同一个 TestingBot 网格上。Appium 将您的应用上传到 TestingBot Storage,然后使用值为 tb://APP_ID 的 appium:app 能力连接到 https://hub.testingbot.com/wd/hub。Espresso 通过 TestingBot CLI 运行:testingbot espresso app.apk app-test.apk --device "Galaxy S24" --real-device。两者共享相同的仪表板、并行槽位和欧盟数据驻留,并且对开源项目免费开放。