文档章节

Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

AlexMahoneFBI
 AlexMahoneFBI
发布于 2014/10/27 10:23
字数 2411
阅读 337
收藏 9

Keyword:Android,Robotium,自动化测试,黑盒测试,已知id如何模拟按键

纯属爱好,最近学习了Android及其自动化测试,总算对Android有了个大概的了解。

毕业后就是用的C,从未用过java,并且最近4年几乎没怎么摸过代码,现在学习android还是有点费劲;不过还好,自我觉得理解的很快,别人碰到的问题我都碰到了,很多网上都有答案。其中一个问题折腾了我好几天,网上也没有完整的答案,凭着自己摸索,试,总算搞定了,后面一一介绍。

关于android的环境搭建,及robotium的测试方法网上的介绍很多,在此不再一一赘述。这里只对一些关键点做一些总结,介绍常见问题的解决办法等等。

1. 需要设置的环境变量

ANDROID_HOME=D:\Android\android-sdks

ANDROID_SDK_HOME=D:\Android\avd

JAVA_HOME= C:\Program Files\Java\jdk1.7.0_05

CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;

PATH=...;(追加)%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%JAVA_HOME%\bin;%CLASSPATH%

注意,环境设置后重启电脑才生效。

如果知道环境变量是否生效?例如查看ANDROID_HOME环境变量的设置,开始->运行->cmd,在cmd下面输入echo % ANDROID_HOME%,如果与我们预期的一致就说明生效了。如果原样输出% ANDROID_HOME%就说明环境变量未生效,需要重启操作系统。

详细说明如下

1.1         ANDROID_HOME

ANDROID_HOME= D:\Android\android-sdks,指定sdk包含的位置,什么是sdk?网上去搜,简单点说就是里面要包含AVD ManagerSDK Manager:

Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

同时,eclipse也要设置SDK的位置,最好和ANDROID_HOME设置一样,如下

Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

1.2         ANDROID_SDK_HOME

ANDROID_SDK_HOME设置的是avd的路径,一般默认在用户路径下,例如C:\Users\tanggod\.android SD卡的空间都是从这里分配的。可以挪到其他目录下,需要在环境变量里面设置如下:

ANDROID_SDK_HOME=D:\Android\avd

如此设置后(重启电脑让环境变量生效 ),以后创建的AVD就会在我们指定的目录下了:

Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

1.3         JAVA_HOME

JDK,JAVA_HOME必须设置jdk安装的目录,例如:

 JAVA_HOME= C:\Program Files\Java\jdk1.7.0_05

C:\Program Files\Java\jdk1.7.0_05

查看JDK版本号?在cmd下面输入:Java -version

 Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

PS:1.7jdk似乎还很不稳定,有问题,建议用1.6的。

jdk下载位置:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

 1.4         CLASSPATH

classpath环境变量,是当我们在开发java程序时需要引用别人写好的类时,要让java解释器知道到哪里去找这个类。通常,sun为我们提供了一些额外的丰富的类包,一个是dt.jar,一个是tools.jar,这两个jar包都位于C:\jdk1.6.0\lib目录下,所以通常我们都会把这两个jar包加到我们的classpath环境变量中set classpath=.;C:\jdk1.6.0\lib\tools.jar;C:\jdk1.6.0\lib\dt.jar。在系统环境变量那一栏中点->新建classpath 
         
变量名:classpath 
         
变量值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;(注意,CLASSPATH最前面是有个“.”的,表示当前目录,这样当我们运行java AClass的时候,系统就会先在当前目录寻找AClass文件了。);

1.5         PATH

环境变量PATH设置的时候,注意是追加,不能将已有的内容清空了。

PATH = %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%JAVA_HOME%\bin;%CLASSPATH%

主要设置的是adb.exeemulator的位置(在tools或者platform-tools目录中),已经jdk工具的路径等等。

2.   如何签名Sign

Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!

为了方便我们开发调试程序,ADT会自动的使用debug密钥为应用程序签名。debug密钥?它在哪?debug密钥是一个名为debug.keystore的文件,它的位置: Ubuntu: ~/.android/debug.keystore win7c:/user/.Android/debug.keystore;  xp: C:/Documents and Settings/user/.Android/debug.keystore),user对应于你自己的windows操作系统用户名,这也就意味着,如果我们想拥有自己的签名,而不是让ADT帮我们签名的话,我们也要有一个属于自己的密钥文件(*.keystore

Robotium做黑盒测试的时候,需要对待测试的apk去除签名,然后自己再签名。google网站上有个签名工具叫做re-sign.jar,比较傻瓜化,直接将apk拖入到re-sign.jar中后自动去除签名,重新再签名;很多人都建议用这个工具。我刚开始也用这个,可是发现用这个工具处理后,无论是android模拟器还是真机,都装不上,提示没有签名。

我将apk解开看,确实是有签名的。

查看签名:

jarsigner -verify -verbose -certs D:\Android\apk\02-AndroidCalculator-sign.apk

 

所以后来,我就手工用命令行来签名。手工签名之前,首先需要去除原来签名的信息,去除方法很简单。就是将apk文件后缀改为.zip,然后从winrar中删除META-INF文件夹,删除后重新将文件名改成apk的后缀,这样就去除签名了。然后用下面的命令进行签名。

注意下面黄色高亮和灰色高亮的字,需要根据自己的debug.keystore的位置,和待签名apk的位置进行设置。 

签名AndroidCalculator

> jarsigner -keystore D:\Android\avd\.android\debug.keystore -storepass android -keypass android D:\Android\apk\02-AndroidCalculator-unsign.apk androiddebugkey

> zipalign 4 D:\Android\apk\02-AndroidCalculator-unsign.apk D:\Android\apk\02-AndroidCalculator-sign.apk

 zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值)

例如签名Plingm

>jarsigner -keystore D:\Android\avd\.android\debug.keystore -storepass android -keypass android D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkandroiddebugkey

> zipalign 4 D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk

 对于jdk 1.7版本,签名稍有区别,需要加上参数:-digestalg SHA1 -sigalg MD5withRSA,例如

 

>jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore D:\Android\avd\.android\debug.keystore -storepass android -keypass android D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkandroiddebugkey

> zipalign 4 D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk

签名后如何安装到模拟器中?命令如下

>emulator -avd android4.1

>adb install D:\Android\apk\plingm\com.freephoo.android_1180-sign.apk

 如果是安装到真机中,就不需要上面第一条命令启动模拟器了,直接usb连接上手机,执行adb install即可。

 

在进行黑盒测试之前,需要知道待测试apk的包及activity信息。查看某个apkpackage name,可以用aapt看:

platform-tools目录下使用如下命令aapt dump badging XXX.apk

aapt dump badgingD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk

 也可以用re-sign.jar看,结果如下:package: name='com.freephoo.android'

 Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

3.   真机调试

  •   设置android手机为USB调试模式。步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择【USB调试】 

  • USB连接手机和电脑,并确保成功。步骤: windows下执行c:/adb devices 查看手机是否已经连接成功。

连接不成功:

Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】
连接成功
Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

  • 设置应用程序为调试模式(这个似乎不要也可以)。操作: 编辑AndroidManifest.xml 增加调试参数android:debuggable="true", 如下:

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">

  • 查看具体异常信息:

执行:./adb logcat 可以查看到更多的系统异常消息。在这些消息中要注意查看Caused by: 头的行,这些行指明了在哪行代码出的错误

4.   已知控件id,如何模拟按键

我们知道,android每个控件都有一个类似R.id.xxxx字符串id。在做白盒测试的时候,将被测试的代码包import一下,直接调用R.id.xxxx就可以了。

但是在黑盒测试的时候,我们只有apk,没有源代码,怎么获取控件的id呢?

java已经给我们提供了这个工具。只需要在cmd下面输入hierarchyviewer即可调出控件查看工具(如果cmd不认识你的hierarchyviewer,说明你的环境变量没有配置正确)

 Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

选中需要查看的应用,点击:"Load View Hierarchy"

如下id/后面的"Button01"即为buttonid
Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

 好了,已知控件的id,在Robotium中如何模拟按键呢?这里常用的有2种方法:

1. 根据button上面的文字。这个很简单,直接solo.clickOnButton("Multiply");即可。

2. 根据控件的坐标。hierarchyviewer是可以查看每个点的坐标的。但是使用起来不是很直观,尤其是对不同分辨率屏幕的手机时,使用起来可能还存在兼容性问题。

 

如果控件上没有文字,clickOnButton就用不了,例如很多应用用图片作为button的说明,clickOnButton就不奏效。用坐标又很麻烦不直观。可否用控件的id呢?

怎么用id,我也纠缠这个问题好几天,网上中文资料搜不到,搜英文,英文搜不到换关键字搜,始终找不到一个比较完整的使用说明。我只好自己一个个命令的试,搞了2天总算找到一个方法,这个方法对于java高手可能不值一提,但对我从未用过java的人来说,确实费了不少周折。

我的方法如下,先获取到控件的view

solo.getCurrentActivity().getResources().getIdentifier

然后再用solo.clickOnView即可。

 

我在使用的时候,简单的封装了下,封装函数如下:

 Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

private int clickCtrlById(String s, int t ){

     intctrl;

     View v;


     if( s == ""){

          return -1;

     }

     ctrl = solo.getCurrentActivity().getResources().getIdentifier(s,"id",TARGET_PACKAGE_ID);

    

     v = solo.getView(ctrl);

     solo.clickOnView(v);

     solo.sleep(t);        

     return 0;

}

    

例如已知某个控件的id(字符串格式)为"btn_dialpad_5",调用方法如下:

clickCtrlById("btn_dialpad_5",400);


本文转载自:http://blog.sina.com.cn/s/blog_6abda9bc01015zoc.html

共有 人打赏支持
AlexMahoneFBI
粉丝 13
博文 44
码字总数 15083
作品 0
海淀
私信 提问
mac上设置robotium环境的总结

在mac上配置robotium环境,需要注意以下几点: java jdk+jre的安装和环境变量的设置 eclipse的安装 eclipse上安卓sdk和adt的扩展和安装 安卓环境变量的设置 eclipse/mac上对安卓真机的设置...

智能小松鼠
2015/04/17
0
0
Android Studio 的AVD无法运行app

按照《第一行代码》这本书上的顺序,首先编写了helloworld程序,在真机上测试没有问题。电脑刚安装好Android Studio软件时,可以在上面运行。 之后我尝试更改AVD路径,顺序是删除原有的模拟机...

小安1113
02/10
251
0
六款Android 应用的自动化测试工具

如今自动化测试已经应用到每天的测试中。这不足为奇,因为自动化测试在测试过程中节约了时间,还能避免包括人为因素造成的测试错误和遗漏。 自动化测试工具选择很多。一些是开源的,一些非常...

kyzg2211
2016/07/20
6.9K
0
Android adt bundle 开发环境配置及第一个“Hello world”程序运行

最近在学习Android 顺便记录下学习过程当作复习吧,这是写的第一篇正式博客。 一、jdk环境配置 二、android adt bundle 下载 三、安装SDK 四、模拟器及真机调试 五、第一个程序 Hello world!...

程序猿付显
2014/07/23
0
0
Android DDMS如何使用?

DDMS 的全称是Dalvik Debug Monitor Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收 SMS、虚拟地理坐...

Kevin_Gan
2010/08/19
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Web安全之XSS攻击与防御小结

Web安全之XSS攻防 1. XSS的定义 跨站脚本攻击(Cross Site Scripting),缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从...

前端小攻略
19分钟前
1
0
JavaScript中的继承及实现代码

JS虽然不像是JAVA那种强类型的语言,但也有着与JAVA类型的继承属性,那么JS中的继承是如何实现的呢? 一、构造函数继承 在构造函数中,同样属于两个新创建的函数,也是不相等的 function Fn...

peakedness丶
22分钟前
1
0
记一次面试最常见的10个Redis"刁难"问题

导读:在程序员面试过程中Redis相关的知识是常被问到的话题。作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题。十分值得一读。 Redis在...

小刀爱编程
35分钟前
13
0
TiDB Lab 诞生记 | TiDB Hackathon 优秀项目分享

本文由红凤凰粉凤凰粉红凤凰队的成员主笔,他们的项目 TiDB Lab 在本届 TiDB Hackathon 2018 中获得了二等奖。TiDB Lab 为 TiDB 培训体系增加了一个可以动态观测 TiDB / TiKV / PD 细节的动画...

TiDB
48分钟前
4
0
当区块链遇到零知识证明

本文由云+社区发表 当区块链遇到零知识证明 什么是零知识证明 零知识证明的官方定义是能够在不向验证者任何有用的信息的情况下,使验证者相信某个论断是正确的。这个定义有点抽象,下面笔者举...

腾讯云加社区
57分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部