uiautomator测试android应用(入门)

首先先了解一下市面上比较常见的几个Android自动化测试工具

** 1、Monkey**是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出。实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性。
2、MonkeyRunner也是Android SDK提供的测试工具。严格意义上来说MonkeyRunner其实是一个Api工具包,比Monkey强大,可以编写测试脚本来自定义数据、事件。缺点是脚本用Python来写,
3、Instrumentation是早期Google提供的Android自动化测试工具类,通过Instrumentation你可以模拟按键按下、抬起、屏幕点击、滚动等事件。Instrumentation是通过将主程序和测试程序运行在同一个进程来实现这些功能,你可以把Instrumentation看成一个类似Activity或者Service并且不带界面的组件,在程序运行期间监控你的主程序。缺点是需要配置AndroidManifest.xml文件,不能跨多个App。
4、UiAutomator也是Android提供的自动化测试框架,基本上支持所有的Android事件操作,对比Instrumentation它不需要测试人员了解代码实现细节(可以用UiAutomatorviewer抓去App页面上的控件属性而不看源码)。基于Java,测试代码结构简单、编写容易、学习成本,一次编译,所有设备或模拟器都能运行测试,能跨App(比如:很多App有选择相册、打开相机拍照,这就是跨App测试)。缺点是只支持SDK 16(Android 4.1)及以上,不支持Hybird App、WebApp。
5、Robotium也是基于Instrumentation的测试框架,目前国内外用的比较多,资料比较多,社区也比较活跃。缺点是不能跨App。
6、Appium是最近比较热门的框架,社区也很活跃,它的优点:开源,支持Native App、Hybird App、Web App;支持Android、iOS、Firefox OS;
Server也是跨平台的,你可以使用Mac OS X、Windows或者Linux;用Appium自动化测试不需要重新编译App;
支持很多语言来编写测试脚本,Java、Javascript、PHP、Python、C#、Ruby等主流语言;

(因为要做的是功能测试,排除掉了monkey,因为要用到根据id来执行操作需要root手机,排除掉了monkeyrunner,因为没有源码排除掉了Robotium,然后尝试了uiautomator满足要求,来记录一下过程)

1、环境搭建

  • jdk
  • sdk
  • eclipse
  • ant
    下载安装,添加环境变量
    ** 遇到的问题1:adb命令不能运行,检查adb.exe是不是在sdb的platform-tools里面,将platform-tools文件夹路径添加环境变量path里面**

2、新建测试项目

  • 在Eclipse里面新建一个java项目(不是android),导入三个jar包(右键项目——>properties——>java build path——>Libraries——>add external jars 在sdk/platforms/andrid-xx/android.jar 和uiautomator.jar 还有需要自行下载junit)
  • 新建一个class,继承UiAutomatorTestCase,可以写测试方法了,测试方法要以test开头,否则不会执行。
uiautomator测试android应用(入门)_第1张图片
Paste_Image.png

3、找到sdk的id

CMD进入\Android-sdk\tools\目录下,运行命令: android list查看对应数字

4、创建build文件

仍然在\Android-sdk\tools\目录下,运行命令:    android create uitest-project -n  -t  -p     比如:    android create uitest-project -n AutoRunner -t 6 -p e:\workspace\AutoRunner    上面的name就是将来生成的jar包的名字,可以自己定义,android-sdk-ID就是上面看到的6;path是Eclipse新建的工程的路径;运行命令后,将会在工程的根目录下生成build.xml文件。如果没生成,检查上面的步骤。

5、编译生成jar

CMD进入项目的工程目录,然后运行ant build,将使用ant编译生成jar,成功将会提示:

6、push并运行jar

adb push /data/local/tmp
adb shell uiautomator runtest -c <工程中的类名,包含包名>
比如: adb push e:\workspace\AutoRunner\bin\AutoRunner.jar data/local/tmp adb shell uiautomator runtest AutoRunner.jar -c com.Runner
然后就能看到手机会按照Runner中的步骤自动执行。
** 遇到的问题2:**

Runtime.getRuntime().exec("am start com.example.testdemo/com.example.testdemo.MainActivity");

** 没有写am start **

** 遇到的问题3:**

new UiObject(new UiSelector().resourceId("com.example.testdemo:id/btn1")).click();

** id可以在uiautomatorviewer.bat里面查看,在sdk/tools里面可以找到,将手机与pc连接,点击图示按钮,移动要想要的控件,右下角可以查看resourse-id. **

uiautomator测试android应用(入门)_第2张图片
Paste_Image.png

**遇到的问题4:模拟完edittext输入完以后,小键盘收不回去,在代码里添加了一句getUiDevice().pressBack();就可以收回去了 **

** 遇到的问题5:每次测试都需要在命令行里输重复的命令,可以写成一个bat文件**
d:

cd workspace****

call ant build

adb push bin\程序包名.jar /data/local/tmp

adb shell uiautomator runtest 程序包名.jar -c PackageName.ClassName#MethodName
cmd

 大家只需新建一个txt文件,将上面的命令段复制进去,根据自己的程序修改相应的参数,保存关闭txt文件,将文件名的txt后缀改为bat即制作完成了快速调试的工具,双击即可运行。
 看到这段bat大家可能有些疑问:

1、为什么没写创建build.xml的命令?因为这条命令一个工程只需要执行一次即可,不需要在调试过程中不断重复执行,所以为了快速调试的速度,自然不应写上这条命令。有需要的人自行添加吧。

2、第1、2条命令为什么不写成一条:cd d:\workspace**** ?因为在windows中,如果你当前目录本来不在d盘,使用那样的命令是无法进入相应目录的,必须用“d:”命令先切换到d盘。

3、第三行程序为什么要在ant前面加call?我之前也是写ant build,但不知道为什么这条命令运行完之后就自动退出,不会再执行下面的指令,后来在网上搜索之后才找到这个方法让其能正常运行。

4、为什么在最后一行写个cmd?为了bat执行完成之后不自动退出,以便查看执行结果是否正常。

** 5、第四行原来参考的网上的写的是push bin\程序包名.jar /data/local/tmp,发现有问题在最前面加了一个adb就好了 **

你可能感兴趣的:(uiautomator测试android应用(入门))