Edwin Guo's Blog home

Auto test android app

自动化测试无论对于大公司还是个人开发者来说,都是减少人力测试成本的重要手段。熟悉开发android的应用之后,应该也有听说过 android 有提供 一套额外的自动化测试工具。其核心的工作流程是,导入jar到android的SD卡,然后通过adb 来控制运行jar的test case,可以用adb 监控log输出,也可以直接写到log文件里保存,有没有root权限并无关系。

在eclipse 的IDE中集成了ant和Junit,可以较为方便的使用。环境配置之类就略过不写。先创建一个java工程,再把android SDK 路径下 目标版本里的 android.jar和uiautomator.jar 添加 到工程里。uiautomator.jar 就是android 提供测试UI的工具,目前4.1以上才有这个工具包。

里面提供了大量的测试用API,包括点击,滑动,拖动,页面跳转等。 官网有提供详细的说明。 和这个jar包配合的还有一个工具在DDMS里的dump View Hierarchy for UI Automator 。此工具可以解析当前运行的界面中的焦点所在的布局,堪称利器。

然后就可以创建一个class继承UiAutomatorTestCase,再往里面添加代码。添加完了之后,就到了 build的阶段。这时,就要用

 <andoid-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path> 这条命令,name是之前创建的工程名,path是工程路径。运行之后会生成一个build.xml的ant build文件。在集成了ant的Eclipse里可以右键这个XML,然后run as ant build,可以看到提示信息:

help:
     [echo] Android Ant Build. Available targets:
     [echo]    help:      Displays this help.
     [echo]    clean:     Removes output files created by other targets.
     [echo]    build:     Builds the test library.
     [echo]    install:   Installs the library on a connected device or
     [echo]               emulator.
     [echo]    test:      Runs the tests.
     [echo] It is possible to mix targets. For instance:
     [echo]    ant build install test
     [echo] This will build, install and run the test in a single command. 按这个提示信息所示,把build.xml 里default 字段 的help 改成build,再次build,就生成成功了。在工程的bin路径下,可以找到对应的jar。

最后把这个 jar push到设备上 你可以访问的位置,官网写的是 /data/local/tmp/ ,SD卡其实也可以,不管有木有root 都可以,所以还是放SD卡吧。运行命令 : adb shell uiautomator runtest LaunchSettings.jar -c com.uia.example.my.LaunchSettings LaunchSettings.jar 这个push进设备的jar包的名字,后面是测试的类函数。 多个函数就 -c function -c funtion 的方式追加即可。


上面写的是构建的方法,在eclipse里稍微容易一些。 遇到的问题: A. dump View Hierarchy for UI Automator 这个工具有时候看不到弹出框,是怎么回事? W. 可能是对话框虽然打开了,但是焦点并不在上面, setFocusable(true); 可能能帮到你。

A.自动测试LOG怎么捕获? W.可以先adb log cat到本地文件,再过滤分析,或者自己写一个实时捕获的工具,log里也可以增加内存的监测,查找内存泄露。

Fork me on GitHub