浅谈 UI Automator

版权声明:转载请注明出处。谢谢 https://blog.csdn.net/xct841990555/article/details/82887383

浅谈UI Automator


  • 1.UIAtomator测试工具定义以及用途
  • 2.四大测试工具的优缺点比较
  • 3.测试工具的工作流程
  • 4.测试环境的配置以及用到的工具的介绍
  • 5.UIAutomator API
  • 6.结合Demo具体的测试操作步骤
  • 7.一点感悟

1.UIAtomator测试工具定义以及用途

Google 官方出的一种简单的UI自动化测试工具。在Android测试中,UI界面测试占了很大一部分比重,而传统的使用人工来测试UI,则比较麻烦和枯燥。这个工具的出现,解决了传统认为中可能出现的错误,运用框架来测试不同的任务,不同的使用场景,很方便。
其优点:可以对所有的操作来进行自动化,操作简单(eg:点击事件 ,侧滑事件,上拉事件,以及模拟键盘输入测试用例)。可以测试所有设备的程序。
缺点:必须要Android4.0以上才能使用。因为只有4.0以上才带uiautomator工具。并且如果在定位时想要使用使用资源id来定位控件的话,则必须在API18以上。

在这里插入图片描述

Uiautomator工具,在sdk的tools工具中,其可以将界面中的各个控件的具体信息展示出来(eg:资源id,报名,位置坐标),方便了后面测试脚本编写时要用到的数据。

2.四大测试工具的优缺点比较

MoneyRunner:优点:操作最为简单,可以录制测试脚本,可视化操作;缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限
UI Automator:Google 官方出的。优点:可以对所有操作进行自动化,操作简单;缺点:Android版本需要高于4.0
Robotium :主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;缺点是针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂;
Espresso: API 相当的小,当然也会对扩展开放的,Espresso 的测试跑起来相当的快(没有等待、睡眠)Gradle 和 Android Studio 的支持.

3.测试工具的工作流程
  • 1.搭建好所需的环境(adt,ant,sdk,等的环境配置,junit jar包的引入等等)
  • 2.确保待测试的应用的各个资源都能被检测到,也就是说要有资源ID,或者要有ontentDescription属性等。
  • 3.安装要测试的应用到手机中,用uiautomator工具分析应用的UI界面元素
  • 4.根据不同场景和需求创建测试案例来模拟应用中的用户操作步骤。
  • 5.创建生成build.xml文件,编译测试案例代码为Jar包并复制该Jar包到安装了待测应用的测试手机中。运行测试并查看结果
  • 6.修改任何发现的bug,然后修复并重新测试
4.测试环境的配置以及用到的工具的介绍

在这里插入图片描述
如上图,在sdk4.0以上的工具中有红线所标的文件,用来查看UI界面的各个控件的一些具体情况。
在这里插入图片描述
将以上两个jar包build path进java测试项目中(这里所说的java测试项目是即将编写的测试脚本的的java项目)
网上下载junit jar包,也build path进java测试项目中。

Jdk什么的就不用说了,这里要说的时另外一个工具—ant
首先在网上下载安装ant ,并且类似于jdk一样的配置ant的环境变量
Ant是一种构建工具,其跨平台,通过网上查资料发现其实ant就是将javac,java
Jar等命令通过build.xml文件整合在一起了,然后一个ant命令,直接将以上命令全部运行了,方便,快捷。其最大的特点就是小巧,跨平台。其实eclipse一键run就可以编译运行一个程序,其原理就是这。虽然ant其小巧,虽然没有图形化界面,但是也有它的用处,其容易配置,如将一个软件部署到服务器上时,就不用大费周折用eclipse了,直接一个ant就可以搞定。
至于上面提到的build.xml,感觉是要自己在里面去配置一些东西。但是在实际的测试中,通过命令去自动生成它,打开里面的文件,感觉也没什么配置的东西。但是就是可以实现自动化的测试。

5.UIAutomator API

这里有几个重要的API,分别是UiDevice,UiSelector,UiObject
在网上查找了一些常用的api,因为都大同小异,所以这里在网上截了几张图拿过来。
UiDevice此类主要包含了获取设备状态信息,和模拟用户至于设备的操作两类api。
在这里插入图片描述
这里主要说一下preKeyCode(int keyCode)这个函数。在编写测试脚本时,有一个需求就是要自动化输入一些文本进去,比如登录注册,来测试该控件的好坏。我用以上API说的来做,行不通,最后上网查,说是和KeyEvent的用法一样,所以就根据KeyEvent的操作来做,可以实现自动化的输入。具体如下:UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_2);

UiSelector主要是通过一定查询方式,定位到所要操作的UI元素
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
UiObject可代表页面的任意元素,它的各种属性定位通常通过UiSelector来完成。

比较常用的Api如clickAndWaitForNewWindow(),表示点击该元素,并且等待新新窗口的展示完毕。这一过程是Android UI Testing框架支持的,不需要额外的控制等待时间。
UiObject允许点击该元素的具体一个部分,Api如clickTopLeft(), longClickBottomRight(),…
通过getText(), getContentDescription(), getVisibleBounds(),… 等api可获取UiObject的相关属性,getPackageName() 可用来明确是否打开了目标测试的App.
setText(), clearTextField() 可以 用来设置以及清空所关联的输入框。
waitForExists() 可以用来操纵相关等待或验证

这里要说的是,在编写测试脚本时,要善于用sleep,这个sleep是Thread下的sleep,我之前没用,然后导致很多步骤都不能执行,我也很纳闷,sleep怎么用,要用几秒,这个好像都有影响。

6结合Demo具体的测试操作步骤
  • 1.首先我找到了一个Android的小例子(之前做过的一个app),如下图
    在这里插入图片描述
    用UIautomator工具来查看UI界面的一些控件信息的截图如下图
    在这里插入图片描述

在这里插入图片描述

  • 2.建立测试脚本,在eclipse中建立一个java 工程,将上面提到的jar导进去(junit jar和sdk中的两个jar)
    在这里插入图片描述

  • 3.建立测试脚本
    根据不同的场景不同的需求来编写测试用例脚本。
    在这里插入图片描述
    在这里插入图片描述

  • 4.然后就是各种命令来运行了。
    首先要先生成build.xml文件,通过以下命令(在cmd中输入,注意路径)
    android create uitest-project -n -t -p
    其中name为将来生成的jar包的名字,可以自己定义,android-sdk-ID为3(Android sdk的标号,可以用android list命令来查看),path是新建工程的路径名称(我的java工程叫Demo)
    在这里插入图片描述
    接下来就是在工程目录下使用ant打jar包,生成后会在bin目录出现。
    在这里插入图片描述
    然后在以下目录运行adb push <jar文件路径> data/local/tmp命令把jar包复制进要测试的设备中
    在这里插入图片描述
    最后运行jar文件
    adb shell uiautomator runtest <jar文件名> -c <包名.类名>,此时则会发现设备已经开始自己在动了。也就是已经开始自动化测试。

在这里插入图片描述

7.一点感悟

自我感觉其实这个工具还好吧,不过可能是因为我在测试时没有做一个控件点击多次和在不同分辨率下测试的实验,所以感觉这个工具没起到多大的作用(只是把点击的流程都走了一遍)。没有发挥出这个工具的长处。用编写测试脚本的时间,完全可以用来人为点控件啊。还有编写脚本时sleep要用好。

猜你喜欢

转载自blog.csdn.net/xct841990555/article/details/82887383