Android自动化 超级轻松的指南来创建您的第一个Espresso测试

朋友你好 预计“移动质量检查工程师”课程将开始,我们希望与您分享有趣的材料的翻译。




什么是浓咖啡?


不,这不是您每天都要喝以振作起来的饮料。 Espresso是Google开发的开源测试框架。 它允许您在真实的设备或仿真器上执行复杂的用户界面测试。 开始为Android编写复杂的测试会花费时间吗?

可能吧 但是,没有什么可以阻止您迈出第一步并学习如何立即使用Espresso框架为Android编写简单的测试用例。

告诉我们更多关于自动化的信息吗?


当然可以 自动化是一种加速测试,使其更加有效和可扩展的方法。 手动测试非常重要,但是将来进行自动测试会更好。

基本上有两种类型的测试框架:

  1. 不需要访问源代码且未集成为项目一部分的框架。 例如, WebDriver,Appium,QTP
  2. 需要访问源代码的框架。 例如, Espresso,KIF(保持功能正常)

Espresso是需要访问源代码的框架,因此对于自动化,我们需要访问项目代码。 因为我们需要一个项目才能工作,所以让我们创建它!

浓缩咖啡的主要成分


Espresso提供三种类型的方法:

  1. ViewMatchers-允许您在当前视图层次结构中查找对象
  2. ViewAssertions-允许您检查对象的状态并确认状态符合条件
  3. ViewActions-这些方法使您可以对对象执行各种操作。

让我们进行更深入的研究,并通过一个真实的示例了解其工作原理。

创建一个简单的自动化应用程序


我们需要做的第一件事是创建一个将要自动化的应用程序。 让我们在Android Studio中创建一个项目。 为此,您当然需要在计算机上安装Android Studio。

1.打开Android Studio并创建一个底部导航活动。


Android Studio。 创建新项目窗口

2.为项目命名并选择一种编程语言。


Android Studio。 项目名称

3.转到androidTest文件夹


Android Studio。 仪器测试。

如您所见,仅在其中编写了一个测试,这不是UI测试,而是JUnit测试。

现在我们需要添加一个简单的用户界面测试。 为此,首先创建一个规则以打开MainActivity

让我们添加一个JUnit Rule注释导入:

import org.junit.Rule; 

下一步是添加以下代码行以补充RunWith注释:

 @Rule public ActivityTestRule<MainActivity> activityActivityTestRule = new ActivityTestRule<>(MainActivity.class); 



现在我们看到ActivityTestRule以红色突出显示。 这意味着我们需要导入ActivityTestRule函数。 但是首先,我们需要添加一个可以执行此操作的库。 简而言之,对于此任务,我们需要Gradle的帮助-专门为此目的而创建的装配自动化系统。

让我们转到Gradle配置文件并添加该库。 打开一个名为build.gradle的文件(模块:app),然后添加以下行:

 androidTestImplementation 'com.android.support.test:rules:1.0.2' 


Android Studio。 添加依赖项。

添加后,您需要单击按钮以同步项目,然后使用测试实现返回文件。

现在已经添加了库,下一步是使用工具测试将其导入文件中:

 import androidx.test.rule.ActivityTestRule; 


Android Studio。 导入ActivityTestRule。

好的,现在我们可以添加我们的第一个测试了。 在ExampleInstrumentedTest中输入以下代码:

 @Test public void clickButtonHome(){ onView(withId(R.id.navigation_home)).perform(click()).check(matches(isDisplayed())); } 


Android Studio。 添加测试并导入其他项目

对于我们的测试,我们需要在开始工作之前导入其他元素。 单击确定按钮 ,实际上我们已经准备好开始我们的测试!

运行浓缩咖啡测试


右键单击左侧的测试,然后选择“运行ExampleInstrumentedTest”



由于这是UI测试 ,而不是单元测试,因此我们将看到一个窗口,其中包含我们要在其上运行的设备的选择。 我已经将“ Nexus 5X”作为设备,因此只需要选择它即可。



对于您而言,如果您从未部署过Android项目,请选择真正的Android设备或单击“创建新的虚拟设备”并创建一个新的模拟设备以运行测试。 这可以是列表中要运行测试的任何设备。

单击确定 ,准备看魔术!


Android Studio。 测试结果

如您所见,我们通过了一组两个测试:创建项目后已经存在的单元测试,以及我们刚刚编写的clickHomeButton测试。


Android Studio。 完成的测试。

顾名思义,我们只单击了底部导航栏中的一个按钮,在MainActivity层次结构中将其称为“ navigation_home”

让我们分析一下在这一系列方法中我们做了什么:

 public void clickButtonHome(){ onView(withId(R.id.navigation_home)).perform(click()).check(matches(isDisplayed())); } 

  1. 1.调用onView 。 此方法是ViewMatchers类型的方法。 我们在活动中找到一个对象来做某事。
  2. 2.接下来,我们将代码称为perform(单击()) 。 此方法是ViewActions类型的方法。 我们指出在这种情况下需要执行的特定操作-单击一下。 Espresso中还有许多可用的操作方法,例如:
  3. 3.我们需要做的最后一件事是确认我们所做的操作确实符合我们的条件,为此,我们执行check(isDisplayed())方法,该方法是ViewAssertions类型的方法。 在这种情况下,我们验证执行单击操作后,该对象(视图)确实显示在屏幕上。

Android视图层次结构


尊敬的读者,我希望我能向您解释如何使用Espresso 为Android编写基本的UI测试

但是,如果您不知道所有这些按钮的位置以及它们的来源,那么了解此处到底发生了什么可能不是那么简单。 为了找出答案 ,我们需要转到左侧的“ res”文件夹,打开“ menu”文件夹,然后选择“ bottom_nav_menu.xml”
这是我们将在此处看到的内容:


Android Studio。 下部导航菜单的演示层次结构。
如您所见,这是为菜单项分配名称的行:

 android:id="@+id/navigation_home" 

这就是我们在代码中用于运行测试的内容。 底部还有菜单按钮“ navigation_dashboard”“ navigation_notifications” ,因此让我们继续并在测试中使用它们。

更多浓缩咖啡测试


我们需要返回ExampleInstrumentedTest文件并添加更多测试功能:

 @Test public void clickButtonDashboard(){ onView(withId(R.id.navigation_dashboard)).perform(click()).check(matches(isDisplayed())); } @Test public void clickButtonNotification(){ onView(withId(R.id.navigation_notifications)).perform(click()).check(matches(isDisplayed())); } 

我们添加的唯一一件事是检查了更多菜单项: “ navigation_dashboard”“ navigation_notifications”


Android Studio。 再添加两个测试。

当然,这些测试可以进一步简化,但是为了显示所有这些工作原理,让我们假设它们完全适合我们的目的。

让我们继续并再次运行这些测试。 单击运行按钮。


Android Studio。 测试结果。

所有4个测试均通过。 在视图层次结构中找到,单击并确认了所有视图。

结论


Espresso是运行UI测试的强大解决方案。 既然您知道它们是如何创建的,就可以编写功能更强大,更复杂的测试了。

有一个不错的测试!

Source: https://habr.com/ru/post/zh-CN472372/


All Articles