自动测试工具UiAutomator

前面几篇文章主要总结了MonkeyRunner,Robotium,今天主要是对另一个自动测试工具UiAutomator进行总结。以上三种自动测试化工具的特点如下:
1、MonkeyRunner:优点:操作最为简单,可以录制测试脚本,可视化操作;基于Pyhon语言编写,语法简单易学,可以跨应用,可以直接以ID来操作测试,不需要签名等其他工具;缺点:运行速度慢,容易出错,可用的接口少等;
2、Rubotium:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大,基于java语言编写;缺点是针对APK操作,而且需要对被测的APK重新签名(有工具),因此操作相对复杂;
3、UiAutomator:优点:可以对所有操作进行自动化,操作简单,能看见点击的手势,基于java语言编写;缺点:Android版本需要高于4.0,无法根据控件ID操作,相对来说功能较为局限,修改脚本后,需要重新生成.jar文件并push至设备中再进行adb shell命令,此操作也相对比较复杂;
以上三种工具若想对apk单个界面进行快速自动测试,个人比较偏向MonkeyRunner,此工具易学,还可以引用第三方插件WrapeasyMonkey来操作,比较方便,修改代码运行也相对比较容易,只是运行速度慢。

MonkeyRunner入门(三)

引用monkeyrunner的第三方库wrapEasyMonkey,是基于EasyMonkeyDevice来二次封装的,并加入了自动异常处理、失败重试、case管理、断言、获取控件上的文本等,大大增强了monkeyrunner本来的功能。比如我们在测试一个apk时,要么通过控件的文本、坐标来进行控制,要么是通过控件id,但大家都知道,测试不同设备不同分辨率时测试同一个apk通过指定的坐标来控制是不现实的;同一apk中所有控件的文本也有相同的情况,因此通过控件的文本来控制也不现实;那通过控件id呢,同一apk下id也有重复的现象,那这应该如何处理呢?可以通过Hierarchy Viewer得到的控件树形图,其实我们完全可以基于每个控件所在的子节点的位置,结合python函数的不定参数的特性,去获取任意已知ID的父节点的任意子节点的引用,然后再用这个引用作为参数去获取其对应的文本、断言等等,要达到这样的功能需要修改原来那个包里的部分函数。

Robotium针对只有apk包的测试方法

被测工程:calculator.apk
Calcultor.apk描述:
1,控键说明:两个编辑框,一个按钮(控键id唯一)
2,对输入的两个数据进行乘法运算
下载Robotium官方例子的最新jar包:robotium-solo-4.0.jar
环境搭建:
1.安装jdk,配置环境变量
2.下载安装Android SDK
3.下载Eclipse,并安装ADT插件,集成Android SDK
操作步骤:
1.采用android自带的debug.keystore通过命令操作重新签名Apk文件
2.打开Eclipse,新建一个Android Test Project,输入工程名TestApk,点击下一步,在“Select Test Target”界面中选择“This project”选项,点击完成
3.在TestApk工程中引入Robotium.jar包。具体操作如下:
在TestApk工程中新建lib文件夹,将下载的robotium-solo-4.0.jar文件拷贝至lib文件夹中,右击选择“Build Path”命令—>“Java Build Path”列表—>“Libraries”选项—>“Add JARs…”按钮—>选择本工程下的lib目录中的“robotium-solo-4.0.jar”文件—->添加完成—>“Order

MonkeyRunner遇到的问题及解决办法

平时喜欢做笔记的我,今天趁有空得好好整理整理^-^ ^-^
一、在cmd中执行adb shell monkey -p fantongyo.apk -v 1000 报错
   注:以上命令表示让设备执行fantongyo.apk 1000次
   提示:No activities found to run, monkey aborted.
   解决办法:
    1.查看已连接的设备,执行adb devices,显示了设备名称
    2.执行命令adb install d:\fantongyo.apk看是否可以正常安装
    3.执行命令adb uninstall com.android.fantongyo看是否可以正常卸载apk(com.android.fantongyo指apk的包名)
    4.以上都正常,发现我已打开了eclipse编辑器,关闭编辑器后,再在cmd中执行adb shell monkey -p fantongyo.apk -v 1000成功
二、在cmd中执行monkeyrunner d:\input.py脚本时报错
    提示:SyntaxError:Non-ASCII character in file ‘d:\input.py’,but no encoding declared;
    解决办法:在脚本的第一行添加中文的注释语句代码:# -*- coding: UTF-8 -*-
三、引用第三方插件ViewClient时,脚本报错
提示:viewclient.py中的adb is not executable的相关错误
解决办法:
1,经viewclient.py查看有环境变量ANDROID_HOME,而机器本身没有添加ANDROID_HOME环境变量
2,添加环境变量ANDROID_HOME,值为sdk的目录

MonkeyRunner入门(二)

通过MonkeyRunner脚本对Calcultor.apk进行自动测试
Calcultor.apk描述:
1,控键说明:两个编辑框,一个按钮(控键id唯一)
2,对输入的两个数据进行乘法运算
脚本功能:主要是对第二个控键即编辑框进行输入操作,
测试方法一:
1,通过HierarchyViewer工具查看apk的包名、入口activity名、布局及控键id等信息
2,通过查看到的控键id坐标位置

MonkeyRunner 录制、回放脚本

一、配置环境
二、新建一个recorder.py文件并存放在D盘下,代码如下:
from com.android.monkeyrunner import MonkeyRunner
from com.android.monkeyrunner.recorder import MonkeyRecorder
device = MonkeyRunner.waitForConnection()
MonkeyRecorder.start(device)
三、在cmd中输入:monkeyrunner d:\recorder.py,打开了monkeyrecorder对话框

采用命令行重新签名apk

重新签名apk,其实也有最简单的方法,即下载一个重新签名的工具re-sign.jar,将apk拖进此工具的窗口就生成了重新签名的apk了。下面我就来讲讲复杂的重新签名的方式:采用命令行方法。
一、配置环境,需安装jdk,sdk
二、在已成功安装jdk的目录中找到jarsigner.exe文件,本机的目录如下:C:\Program Files\Java\jdk1.8.0_20\bin
三、去除准备重新签名的apk本身的签名(fantongyo.apk)
将apk以Winrar方式打开,删除META-INF文件夹即可,并将此Apk文件拷贝至C:\Program Files\Java\jdk1.8.0_20\bin目录中
Apk压缩包内容解析:
1.META-INF目录:存放签名后的CERT和MANIFEST文件,用于识别软件的签名及版本信息
2.rest目录:存放各种Android原始资源,包括:动画anim、图片drawable、布局layout、菜单、xml等等
3.AndroidManifest.xml编码后的Android项目描述文件,包括了Android项目的名称、版限、程序组件描述等等
4.Classes.dex编译后Class被dx程序转换成Dalvik虚拟机的可执行字节码文件
5.Resources.arsc所有文本资源的编译产物,里面包含了各Location对应的字符串资源
四、重新签名Apk文件

夜深了

纸箱人阿楞夜深了,其实城市还没休息,或者说生活才刚刚开始……
夜深了,心静了,逛了下朋友圈,发现有晒结婚的,有晒宝宝的,有晒旅游的,有晒公司福利的,有晒与iphone6有关的,有晒美食的,有晒自己奋斗加班的,也有朋友时不时打广告的(面膜神器),更有在为国庆去哪儿玩抢票发愁的……看到大家都是开开心心的过好每一天,而自己的心情反倒复杂了起来。看来有时还是不要逛朋友圈为好,免得给自己增加烦脑。还是看自己感兴趣的博客和网站最佳,另外有事没事也可捣腾下自己博客zzzzz~。