Android自动化测试探索
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自动化测试探索的更多相关文章
- Android自动化测试探索(五)代码覆盖率统计
Android 代码覆盖率统计 本周开始准备统计Android自动化用例的代码覆盖率,将最终使用的方法记录下来. 覆盖率监测的原理 覆盖率监测的原理跟iOS上的原理差不多,大致的思路参考下吧, iOS ...
- Android自动化测试探索(七)代码覆盖率统计
之前在 https://www.cnblogs.com/zhouxihi/p/11453738.html 这篇写了一种统计Android覆盖率的方式 但是对于一些比较复杂或者代码结构不够规范的项目,有 ...
- Android自动化测试探索(二)常用自动化工具
Android常用自动化工具 ADB - 是Google提供的为Android编写UI测试用例的自动化工具, Android开发/测试人员不可替代的强大工具 uiautomator - 是Google ...
- Android自动化测试探索(三)Android SDK tools安装、aapt配置以及使用aapt获取apk包名
Android SDK tools安装 下载连接: https://www.androiddevtools.cn 找到对应mac的版本下载安装即可 AAPT配置 #1. 进入根目录 cd ~ #2. ...
- Android自动化测试探索(四)uiautomator2简介和使用
uiautomator2简介 项目Git地址: https://github.com/openatx/uiautomator2 安装 #1. 安装 uiautomator2 使用pip进行安装, 注意 ...
- Android自动化测试探索(一)adb详细介绍
adb详细介绍 #1. 基本简介 adb,即Android Debug Bridge,它是Android开发/测试人员不可替代的强大工具 #2. Mac上安装adb 安装brew /usr/bin/r ...
- 使用 flow.ci 实现 Android 自动化测试与持续集成
在上篇文章--如何实现 Android 应用的持续部署中,我们使用的是 flow.ci + Github + fir.im 实现 Android 应用的持续部署.对于 Android 开发者,他们可能 ...
- Android自动化测试-Robotium(一)简介
一.Robotium原理 Robotium是一款Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击.长按.滑动等).查找和断言机制的API ...
- 解放双手——Android自动化测试
解放程序猿宝贵的右手(或者是左手) http://blog.csdn.net/eclipsexys/article/details/45622813 --Android自动化测试技巧 Google大神 ...
随机推荐
- BZOJ4911: [Sdoi2017]切树游戏
BZOJ 4911 切树游戏 重构了三次.jpg 每次都把这个问题想简单了.jpg 果然我还是太菜了.jpg 这种题的题解可以一眼秒掉了,FWT+动态DP简直是裸的一批... 那么接下来,考虑如何维护 ...
- CDH hive-1.1.0-cdh5.10.0 安装
又重新安装Hive,记录一下吧: hadoop早已经装上了. cdh5的hive下载地址: http://archive.cloudera.com/cdh5/cdh/5/ 下载文件:hive-1.1. ...
- Codechef TAPAIR Counting the important pairs 随机化、树上差分
传送门 题意:给出一个$N$个点.$M$条边的无向连通图,求有多少组无序数对$(i,j)$满足:割掉第$i$条边与第$j$条边之后,图变为不连通.$N \leq 10^5 , M \leq 3 \ti ...
- PMS-授权中心
概述 授权中心用基于角色的访问控制思想(RBAC-Role Based Access Control)来实现各个业务系统的功能权限及数据权限控制.功能权限是指能否进入页面及使用页面上的操作.数据权限控 ...
- 51Nod 1443 路径和树
还是一道很简单的基础题,就是一个最短路径树的类型题目 我们首先可以发现这棵树必定满足从1出发到其它点的距离都是原图中的最短路 换句话说,这棵树上的每一条边都是原图从1出发到其它点的最短路上的边 那么直 ...
- 在平衡树的海洋中畅游(一)——Treap
记得有一天翔哥毒奶我们: 当你们已经在平衡树的海洋中畅游时,我还在线段树的泥沼中挣扎. 我觉得其实像我这种对平衡树一无所知的蒟蒻也要开一开数据结构了. 然后花了一天啃了下最简单的平衡树Treap,感觉 ...
- 运行supervisord -c /etc/supervisor/supervisord.conf 出错,解决办法
坑都让我踩了...... 1 supervisord -c /etc/supervisor/supervisord.conf 什么意思? 答:手动启动:supervisord 具体详见 ...
- C#大型电商项目优化(三)——扩展性与支付
上一篇文章引来不少非议,笔者并非对EF有看法,而是针对不同的业务场景和框架背景,挑选不同的方案.每个方案都有其优势劣势,挑选最快速,最简单的方案,是笔者的初衷. 看评论也是学习的过程,然而有些只做评价 ...
- Terraform:简介
在 DevOps 实践中,基础设施即代码如何落地是一个绕不开的话题.像 Chef,Puppet 等成熟的配置管理工具,都能够满足一定程度的需求,但有没有更友好的工具能够满足我们绝大多数的需求?笔者认为 ...
- Linux下对文件进行加密备份的操作记录
由于公司之前在阿里云上购买了一些机器,后续IDC建设好后,又将线上业务从阿里云上迁移到IDC机器上了,为了不浪费阿里云上的这几台机器资源,打算将这些机器做成IP SAN共享存储,然后作为IDC数据的一 ...