什么是Espresso?
Espresso是谷歌开发的一款功能强大且简洁的测试框架,用于为安卓应用程序创建可靠的用户界面(UI)测试。作为AndroidX Test套件的一部分,它是希望在原生安卓生态系统中自动化UI测试的开发人员的标准选择。Espresso的核心优势在于其与UI线程的自动同步,这确保了测试操作和断言仅在应用程序空闲时执行,从而极大地减少了测试的不稳定性。
主要特点
- 自动同步: Espresso会自动等待当前消息队列中的UI事件完成,然后再执行下一个测试操作,从而实现高度稳定和可靠的测试。
- 可读且简洁的API: 该API设计得易于学习和阅读,使用“匹配、执行、检查”的模式,使测试变得直观。例如:
onView(withId(R.id.my_button)).perform(click()); - 与Android Studio完全集成: Espresso内置于安卓开发环境中,允许您直接从IDE编写、运行和调试测试。
- 黑盒测试: 它允许您从用户的角度测试您的应用程序,而无需了解底层代码实现。
- 可扩展性: 该框架可以通过
espresso-contrib等附加库进行扩展,以支持复杂视图(例如RecyclerView、DatePicker),并通过espresso-web来测试WebView组件。
使用案例
- UI流程验证: 自动化关键用户旅程的测试,例如登录过程、用户注册或结账流程,以确保它们按预期工作。
- 验证UI元素状态: 编写断言来检查UI元素的状态,例如验证
TextView是否显示正确的文本或Button是否被禁用。 - 回归测试: 在CI/CD管道中运行一整套Espresso测试,以在UI回归问题进入生产环境之前捕获它们。
- 在不同设备上测试: 将Espresso与Firebase Test Lab等服务结合使用,在各种物理和虚拟安卓设备上运行您的UI测试。
入门指南
这是一个用Kotlin编写的“Hello World”风格的Espresso测试示例。此测试找到一个按钮,单击它,然后验证一个TextView是否更新为新消息。
首先,将必要的依赖项添加到您的build.gradle文件中:
```groovy androidTestImplementation ‘androidx.test.ext:junit:1.1.5’ androidTestImplementation ‘androidx.test.espresso:espresso-core:3.5.1’
接下来,编写测试类:
```kotlin import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class) class MyActivityTest {
@get:Rule
val activityRule = ActivityScenarioRule(MyActivity::class.java)
@Test
fun testChangeText_sameActivity() {
// 找到按钮并执行点击操作
onView(withId(R.id.changeTextButton)).perform(click())
// 检查文本视图是否具有新文本
onView(withId(R.id.helloWorldTextView)).check(matches(withText("Hello Espresso!")))
} }
定价
Espresso是谷歌提供的一个开源框架,完全免费使用。它采用Apache 2.0许可证。