Android自动化测试探索

前言

通常来说,我们开发完成产品之后,都是由测试组或者是我们自己点一点,基本上没有问题了就开始上线。但是,随着时间的堆叠,一款产品的功能也越来越多。这时,我们为了保证产品的质量,就需要在每次测试时将所有的流程都走一遍。然而,对于一款庞大的产品来说这是困难又复杂的。因为我们自己手动测试需要花费大量的时间来完成主业务测试这种重复性工作。为了保证效率以及解决成本,我们就需要考虑将这些过程采用自动化测试来完成。

自动化测试介绍

何为自动化测试?自动化测试就是通过计算机将我们人工操作的动作自动完成,比如自动点击,自动填入文本等等。Android也提供了强大的自动化测试工具,那就是UIAutomator。官方介绍文档为:https://developer.android.google.cn/training/testing/ui-testing/uiautomator-testing.html#setup。

UIAutomator介绍

你可能会有疑问,这个自动化测试能完成什么内容?我来举个简单的例子:

这里写图片描述

这种登录界面就算没做过,但一定也见过。我们一般会在测试时输入用户名,密码,然后登录。那么自动化测试可以干什么呢?它可以自己输入用户名、密码,然后登录,一气呵成。你可能会觉得,就这还需要上自动化测试?NoNoNo,我这里只是举个例子,它能帮你完成任何事情。甚至是唤醒屏幕,输入图形验证码等都可以完成。

说到这里,肯定有同学已经跃跃欲试了,憋着急,慢慢来。

UIAutomator的使用

首先我们还是需要照着官方文档学习,上面已经提供过地址,将它打开。

配置

在android的APP module中,加入以下依赖:

dependencies {
...
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
辅助工具

因为自动化测试是自动完成的,所以它需要先找到对应的View才能进行操作。然而怎么指定应该查找哪个View呢,Android提供了辅助工具uiautomatorviewer。相信很多同学对这个工具很熟悉。

这里写图片描述

它位于<android-sdk>/tools/目录下,使用命令行将其启动:

$ uiautomatorviewer
1
1
启动后找到Device Screenshot按钮,uiautomatorviewer将会通过adb开始截取手机上的界面,并开始分析View树,就像图中所示。这时随便选择一个空间,在右下角便会列出该View的一些关键信息。其中图中方框所标识的便是基本的,也是最常用的几项信息。这些信息用来在做自动化测试时给UIAutomator提供关键的查找信息。稍后便会用到。

创建测试类

我们需要专门搞一个类用来做自动化测试。如果使用的是AndroidStudio来进行开发,那么在创建工程之初,AndroidStudio会自动创建好一个Android的测试类,就像下面这样:

这里写图片描述

我们平常开发都是在main文件夹里开发,平常不会注意到另外两个文件夹androidTest以及test是做什么用的,今天你将会了解到它们是用来做什么的。

首先我们做Android测试所用的类就是位于androidTest文件夹下的那个自动创建好的类,我们将其打开:

这里写图片描述

在示例类ExampleInstrumentedTest的顶部有两个标注:

@RunWith(AndroidJUnit4.class)
@SdkSuppress(minSdkVersion www.yongshiyule.cn/ = 18)
1
2
1
2
这两样是必须要配置的,Android的自动化测试框架是基于Android Testing Support Library的,它只能运行在Android4.3以上的设备,并且它需要和AndroidJUnitRunner一起工作才能完成测试。

如果是自己创建的类,那么一定要记得在类的上面添加注解:@RunWith(AndroidJUnit4.class),除此之外还需要将AndroidJUnitRunner设置为默认的TestRunner。

将AndroidJUnitRunner设置为默认的TestRunner需要在app的build.gradle文件中加入以下配置:

android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
好了,我们的测试准备工作已经完成,接下来就开始写测试执行过程了。

测试逻辑过程

这里还是使用登录页面做示例,该登录页面是由AndroidStudio模板自动生成的。

这里写图片描述

我们使用自动化测试完成的测试功能有,填入用户名、密码,然后登录。

我们需要先启动uiautomatorviewer:

这里写图片描述

启动之后的界面:

这里写图片描述

我们点击图中箭头所指的按钮,出现以下界面:

这里写图片描述

在左边的图中选择我们第一个要输入文字的EditText输入框,我们可以看到右边出现了这个View层级的属性结构以及该View的一些基本属性,在这里的的EditText的index为0,resource-id为com.sahadev.autotestforlogin:id/password,还有它是哪个类:android.widget.EditText。

得知这些基本信息之后,我们开始了解一下测试代码的执行过程:

1.首先需要获得可以访问设备的上下文对象UiDevice,UiDevice的实例通过静态方法getInstance()获得,该方法需要传入一个Instrumentation对象。
2.通过UiDevice的findObject()来找到UiObject,这个UiObject代表了刚刚我们指定的EditText。
3.通过UiObject来模拟用户的真实操作,比如填入文本,或者点击等操作。由于这里是EditText,所以我们的工作就是填入文本,使用UiObject的setText()方法即可。
测试逻辑实现

有了以上的知识之后,我们来实现这个登录过程。

1.首先获得UiDevice对象:

mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
1
1
2.通过指定的条件查找代表EditText的UiObject:

UiObject email = mDevice.findObject(new UiSelector( www.xucaizxyl.com) .resourceId("com.sahadev.autotestforlogin:id/email"));
1
1
3.往EditText中写入邮箱地址:

email.setText("sahadev@foxmail.com");
1
1
好了,到这里如果执行的话,系统就会帮我们自动填入这个邮箱地址了。接下来我们的工作就是继续填入密码,然后点击登录。我们来完成剩下的代码。完整的代码如下:

package com.sahadev.autotestforlogin;

import android.support.test.www.6788878.cn/ InstrumentationRegistry;
import android.support.test.filters.SdkSuppress;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject;
import android.support.test. www.yongshiyule178.com uiautomator.UiSelector;

import org.junit.Before;
import org.junit.runner.RunWith;

/**
* Instrumentation test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
@SdkSuppress(minSdkVersion = 18)
public class ExampleInstrumentedTest {

private UiDevice mDevice;

@Before
public void startMainActivityFromHomeScreen( www.tips139.com/) {

mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());

UiObject email = mDevice.findObject(new UiSelector().resourceId("com.sahadev.autotestforlogin:id/email"));
//填入邮箱地址
email.setText("sahadev@foxmail.com");

UiObject password = mDevice.findObject(new UiSelector().resourceId("com.sahadev.autotestforlogin:id/password"));
//填入密码
password.setText("123456");

UiObject loginButton = mDevice.findObject(new UiSelector().resourceId("com.sahadev.autotestforlogin:id/ www.xinbeiyule.cn /email_sign_in_button"));
//点击登录
loginButton.click();
基本的测试代码已经完成,接下来就是如何运行了。在AndroidStudio中点击运行按钮即可:

这里写图片描述

运行效果如下:

这里写图片描述

怎么样,有没有很想试一把的感觉呢?慢慢积累,它就是一个很庞大的工程了。今天的文章只是带大家入一下门,这个自动化测试工具本身很强大,可以完成很多工作。有更多的问题可以加群讨论。UIAutomator的官方介绍文档地址为:https://developer.android.google.cn/training/testing/ui-testing/uiautomator-testing.html,更多内容请点击查看。

我建了一个QQ群,欢迎对学习有兴趣的同学加入。我们可以一起探讨、深究、掌握那些我们会用到的技术,让自己不至于太落伍

Android自动化测试探索的更多相关文章

  1. Android自动化测试探索(五)代码覆盖率统计

    Android 代码覆盖率统计 本周开始准备统计Android自动化用例的代码覆盖率,将最终使用的方法记录下来. 覆盖率监测的原理 覆盖率监测的原理跟iOS上的原理差不多,大致的思路参考下吧, iOS ...

  2. Android自动化测试探索(七)代码覆盖率统计

    之前在 https://www.cnblogs.com/zhouxihi/p/11453738.html 这篇写了一种统计Android覆盖率的方式 但是对于一些比较复杂或者代码结构不够规范的项目,有 ...

  3. Android自动化测试探索(二)常用自动化工具

    Android常用自动化工具 ADB - 是Google提供的为Android编写UI测试用例的自动化工具, Android开发/测试人员不可替代的强大工具 uiautomator - 是Google ...

  4. Android自动化测试探索(三)Android SDK tools安装、aapt配置以及使用aapt获取apk包名

    Android SDK tools安装 下载连接: https://www.androiddevtools.cn 找到对应mac的版本下载安装即可 AAPT配置 #1. 进入根目录 cd ~ #2. ...

  5. Android自动化测试探索(四)uiautomator2简介和使用

    uiautomator2简介 项目Git地址: https://github.com/openatx/uiautomator2 安装 #1. 安装 uiautomator2 使用pip进行安装, 注意 ...

  6. Android自动化测试探索(一)adb详细介绍

    adb详细介绍 #1. 基本简介 adb,即Android Debug Bridge,它是Android开发/测试人员不可替代的强大工具 #2. Mac上安装adb 安装brew /usr/bin/r ...

  7. 使用 flow.ci 实现 Android 自动化测试与持续集成

    在上篇文章--如何实现 Android 应用的持续部署中,我们使用的是 flow.ci + Github + fir.im 实现 Android 应用的持续部署.对于 Android 开发者,他们可能 ...

  8. Android自动化测试-Robotium(一)简介

    一.Robotium原理 Robotium是一款Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击.长按.滑动等).查找和断言机制的API ...

  9. 解放双手——Android自动化测试

    解放程序猿宝贵的右手(或者是左手) http://blog.csdn.net/eclipsexys/article/details/45622813 --Android自动化测试技巧 Google大神 ...

随机推荐

  1. C# 异步上传图片案例

    好久没写博客了,都感觉自己快堕落了!今天随性写一篇关于异步上传图片的程序及插件! 说是程序及插件,其实程序占大头,所谓的插件只是两个JS.分别为:jquery.html5upload.js 和 jqu ...

  2. [Oracle]如何在Oracle中设置Event

    为了调查Oracle 的故障,可以通过设置event ,来了解详细的状况.方法如下: ■ 如果使用 SPFILE, =============To enable it: 1. Check the cu ...

  3. .NET日志记录之——log4net划重点篇

    .NET日志记录之--log4net划重点篇 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不 ...

  4. Java开源博客My-Blog之mysql容器重复初始化的严重bug修复过程

    写在前面的话 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> <Java开源博客My-Blog之docker容器组件化修改> ...

  5. hadoop-mapreduce-(1)-统计单词数量

    编写map程序 package com.cvicse.ump.hadoop.mapreduce.map; import java.io.IOException; import org.apache.h ...

  6. python-知识回顾-16

    知识回顾 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 欧 ...

  7. 12.10 Daily Scrum

    各种大作业,进度会放缓一些.   Today's Task Tomorrow's Task 丁辛 完善餐厅列表,显示距离. 实现和菜谱相关的餐厅列表.             邓亚梅          ...

  8. 猫咪记单词Beta版使用说明

    猫咪记单词Beta版使用说明 一.项目背景 英语四级考试.六级考试.托福.雅思等英语方面的考试是现在大学生必须面对的问题.同时因为学生对手机的使用越来越频繁,而且仅仅通过书本背诵单词又比较无聊坚持的时 ...

  9. sprint最后冲刺-out to out

    摘要:团队合作.实现四则APP,上传代码到github. 1.之前我们队一直无法把代码上传到github.直到今天.找到了一种可以协助代码上github的软件msysgit. 经过:(一行行看) 我们 ...

  10. html之间传递参数

    转自:http://blog.163.com/yangzhanghui_job/blog/static/179575062201271624839972/ aa.html 往 bb.html 传参 a ...