在本文中,您将学习如何使用Espresso测试框架编写UI测试以及如何自动化测试工作流程,而不是使用乏味且容易出错的手动过程。
Espresso是用于在Android中编写UI测试的测试框架。 根据官方文档,您可以:
使用Espresso编写简洁,美观且可靠的Android UI测试。
1.为什么要使用意式浓缩咖啡?
手动测试的问题之一是执行起来很耗时且乏味。 例如,要在Android应用中测试登录屏幕(手动),您必须执行以下操作:
- 启动应用程序。
- 导航到登录屏幕。
- 确认
usernameEditText
和passwordEditText
是否可见。 - 在各自的字段中键入用户名和密码。
- 确认登录按钮是否也可见,然后单击该登录按钮。
- 检查该登录成功或失败时是否显示正确的视图。
与其花所有这些时间来手动测试我们的应用程序,不如花更多时间编写使我们的应用程序与众不同的代码! 而且,即使手动测试很繁琐且相当缓慢,它仍然容易出错,并且您可能会错过一些极端情况。
自动化测试的一些优点包括:
- 自动化测试每次执行时都执行完全相同的测试用例。
- 在将问题发送给质量检查团队之前,开发人员可以Swift发现问题。
- 与进行手动测试不同,它可以节省大量时间。 通过节省时间,软件工程师和质量检查团队可以将更多的时间花费在具有挑战性和奖励性的任务上。
- 实现了更高的测试覆盖率,从而带来了更高质量的应用程序。
在本教程中,我们将通过将Espresso集成到Android Studio项目中来对其进行学习。 我们将为登录屏幕和RecyclerView
编写UI测试,并了解测试意图。
质量不是一种行为,而是一种习惯。 - 巴勃罗毕加索
2.先决条件
要遵循本教程,您需要:
- 对核心Android API和Kotlin的基本了解
- Android Studio 3.1.3或更高版本
- Kotlin插件 1.2.51或更高版本
可以在我们的GitHub存储库中找到本教程的示例项目(在Kotlin中),因此您可以轻松地继续学习。
3.创建一个Android Studio项目
启动您的Android Studio 3并创建一个名为MainActivity
的空活动的新项目。 确保选中包括Kotlin支持 。
![创建Android项目对话框](https://i-blog.csdnimg.cn/blog_migrate/202780dc86787380db883717d17bdf29.png)
4.设置Espresso和AndroidJUnitRunner
创建新项目后,请确保在build.gradle中从Android测试支持库添加以下依赖项 (尽管Android Studio已经为我们包括了它们)。 在本教程中,我们将使用最新的Espresso库版本3.0.2(截至撰写本文时)。
android {
//...
defaultConfig {
//...
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//...
}
dependencies {
//...
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test:rules:1.0.2'
}
我们还包括了工具运行器AndroidJUnitRunner
:
针对Android包(应用程序)运行JUnit3和JUnit4的
Instrumentation
进行测试。
请注意, Instrumentation
只是用于实现应用程序工具代码的基类。
关闭动画
Espresso的同步(不知道如何等待动画完成)会导致某些测试失败-如果您允许在测试设备上播放动画。 要关闭测试设备上的动画,请转到“设置” >“ 开发人员选项” ,然后关闭“绘图”部分下的以下所有选项:
- 窗口动画比例
- 过渡动画比例
- 动画师持续时间量表
5.在Espresso中编写您的第一个测试
首先,我们开始测试登录屏幕。 登录流程的开始过程如下:用户启动应用程序,并且显示的第一个屏幕包含一个“ 登录”按钮。 单击该登录按钮后,它将打开LoginActivity
屏幕。 该屏幕仅包含两个EditText
(用户名和密码字段)和一个Submit按钮。
这是我们的MainActivity
布局:
![MainActivity布局](https://i-blog.csdnimg.cn/blog_migrate/ba43e28f663850d80d65cd8073761d36.png)
这是我们的LoginActivity
布局的样子:
![](https://i-blog.csdnimg.cn/blog_migrate/efaee26e6e6dbb5bf7f606cea7287670.png)