Android UI Testing怎么做?用例怎么写和跑测试?

文章导读
上一个 测验 下一个 Android SDK 提供了以下工具来支持对您的应用程序进行自动化、功能性的 UI 测试。
📋 目录
  1. uiautomatorviewer
  2. uiautomator
  3. 示例
A A

Android - UI 测试



上一个
测验
下一个

Android SDK 提供了以下工具来支持对您的应用程序进行自动化、功能性的 UI 测试。

  • uiautomatorviewer
  • uiautomator

uiautomatorviewer

一个 GUI 工具,用于扫描和分析 Android 应用程序的 UI 组件。

uiautomatorviewer 工具提供了一个便捷的可视化界面,用于检查布局层次结构并查看测试设备上显示的单个 UI 组件的属性。使用这些信息,您可以稍后使用针对特定 UI 组件的 selector 对象创建 uiautomator 测试。

要分析您想要测试的应用程序的 UI 组件,请在安装示例中给出的应用程序后执行以下步骤。

  • 将您的 Android 设备连接到开发机器
  • 打开终端窗口并导航到 <android-sdk>/tools/
  • 使用此命令运行工具
uiautomatorviewer

命令将按以下方式执行

Android UI Testing Tutorial

您将看到以下窗口出现。这是 UI Automator Viewer 的默认窗口。

Android UI Testing Tutorial
  • 点击右上角的设备图标。它将开始捕获设备上当前打开屏幕的 UI XML 快照。类似于这样。

Android UI Testing Tutorial

之后,您将在 uiautomatorviewer 窗口中看到设备屏幕的快照。

Android UI Testing Tutorial

在该窗口的右侧,您将看到两个分区。上方分区解释了节点结构,即 UI 组件的排列和包含方式。点击每个节点会在下方分区显示详细信息。

例如,考虑下图。当您点击按钮时,您可以在上方分区看到 Button 被选中,并在下方分区显示其详细信息。由于此按钮是可点击的,因此其 clickable 属性设置为 true。

Android UI Testing Tutorial

UI Automator Viewer 还帮助您以不同方向检查 UI。例如,只需将设备方向更改为横向,然后再次捕获屏幕截图。下图显示了这一点 −

Android UI Testing Tutorial

uiautomator

现在您可以创建自己的测试用例并使用 uiautomatorviewer 运行它来检查它们。要创建自己的测试用例,请执行以下步骤 −

  • 在 Project Explorer 中,右键单击您创建的新项目,然后选择 Properties > Java Build Path,并执行以下操作 −

  • 点击 Add Library > JUnit,然后选择 JUnit3 以添加 JUnit 支持。

  • 点击 Add External JARs... 并导航到 SDK 目录。在 platforms 目录下,选择最新的 SDK 版本并添加 uiautomator.jar 和 android.jar 文件。

  • 将您的类扩展为 UiAutomatorTestCase

  • 编写必要的测试用例。

  • 编码测试后,按照以下步骤构建并将测试 JAR 部署到目标 Android 测试设备。

  • 创建所需的构建配置文件以构建输出 JAR。要生成构建配置文件,请打开终端并运行以下命令:

<android-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path>
  • <name> 是包含您的 uiautomator 测试源文件的项目名称,<path> 是相应项目目录的路径。

  • 从命令行设置 ANDROID_HOME 变量。

set ANDROID_HOME=<path_to_your_sdk>
  • 转到包含 build.xml 文件的项目目录并构建您的测试 JAR。
ant build
  • 使用 adb push 命令将生成的测试 JAR 文件部署到测试设备。
adb push <path_to_output_jar> /data/local/tmp/
  • 使用以下命令运行您的测试 −
adb shell uiautomator runtest LaunchSettings.jar -c com.uia.example.my.LaunchSettings

示例

下面的示例演示了 UITesting 的使用。它创建一个基本的应用程序,可用于 uiautomatorviewer。

要实验这个示例,您需要在实际设备上运行它,然后按照开头解释的 uiautomatorviewer 步骤操作。

步骤 描述
1 您将使用 Android Studio 在包 com..myapplication 下创建一个 Android 应用程序。
2 修改 src/MainActivity.java 文件以添加 Activity 代码。
3 修改布局 XML 文件 res/layout/activity_main.xml,根据需要添加任何 GUI 组件。
4 创建 src/second.java 文件以添加 Activity 代码。
5 修改布局 XML 文件 res/layout/view.xml,根据需要添加任何 GUI 组件。
6 运行应用程序,选择一个运行中的 Android 设备,将应用程序安装到该设备上并验证结果。

以下是 MainActivity.java 的内容。

package com..myapplication;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {
   Button b1;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1=(Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent in =new Intent(MainActivity.this,second.class);
            startActivity(in);
         }
      });
   }
}

以下是 second.java 的内容。

package com..myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class second extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.view);
      Button b1=(Button)findViewById(R.id.button2);
      
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Toast.makeText(second.this,"Thanks",Toast.LENGTH_LONG).show();
         }
      });
   }
}

以下是 activity_main.xml 的内容

在以下代码中,abc 表示 example.com 的徽标
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="UI Animator Viewer"
      android:id="@+id/textView"
      android:textSize="25sp"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text=""
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_alignRight="@+id/textView"
      android:layout_alignEnd="@+id/textView"
      android:textColor="#ff36ff15"
      android:textIsSelectable="false"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Button"
      android:id="@+id/button"
      android:layout_marginTop="98dp"
      android:layout_below="@+id/imageView"
      android:layout_centerHorizontal="true" />

</RelativeLayout>

以下是 view.xml 的内容。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="match_parent">

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text=" Button"
      android:id="@+id/button2"
      android:layout_gravity="center_horizontal"
      android:layout_centerVertical="true"
      android:layout_centerHorizontal="true" />
</RelativeLayout>

以下是 Strings.xml 的内容。

<resources>
   <string name="app_name">My Application</string>
</resources>

以下是 AndroidManifest.xml 的内容。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com..myapplication" >
   
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
      <activity android:name=".second"></activity>
      
   </application>
</manifest>

让我们尝试运行您的 UI Testing 应用程序。我假设您已将实际的 Android 移动设备连接到计算机。要从 Android Studio 运行应用程序,请打开项目的一个 activity 文件,然后点击工具栏中的 Run Eclipse Run Icon 图标。在启动应用程序之前,Android Studio 将显示以下窗口,让您选择要在哪里运行 Android 应用程序。

Anroid UI Testing Tutorial

选择您的移动设备作为选项,然后检查您的移动设备,它将显示应用程序屏幕。现在,只需按照顶部 ui automator viewer 部分中提到的步骤,对此应用程序执行 UI 测试。