Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】
上一篇 / 下一篇 2015-07-17 14:44:39 / 个人分类:Robotium
CTVXw:[w0目录[-]51Testing软件测试网s9R([ v&I'f
Keyword:Android,Robotium,自动化测试,黑盒测试,已知id如何模拟按键51Testing软件测试网a)Hm/d M2z`)ROQ
纯属爱好,最近学习了Android及其自动化测试,总算对Android有了个大概的了解。51Testing软件测试网E,MKvBh
毕业后就是用的C,从未用过java,并且最近4年几乎没怎么摸过代码,现在学习android还是有点费劲;不过还好,自我觉得理解的很快,别人碰到的问题我都碰到了,很多网上都有答案。其中一个问题折腾了我好几天,网上也没有完整的答案,凭着自己摸索,试,总算搞定了,后面一一介绍。
/U wva$y,X0关于android的环境搭建,及robotium的测试方法网上的介绍很多,在此不再一一赘述。这里只对一些关键点做一些总结,介绍常见问题的解决办法等等。51Testing软件测试网-n*^ j7X1\BX!{1|T/T!S
1. 需要设置的环境变量
ANDROID_HOME=D:\Android\android-sdks51Testing软件测试网5qh;ro"L
ANDROID_SDK_HOME=D:\Android\avd51Testing软件测试网5G$LB1CS2_9^oK8?
JAVA_HOME= C:\Program Files\Java\jdk1.7.0_05
8RM"fvGC0uP9S#I0CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;51Testing软件测试网(NFt#Mk\p
PATH=...;(追加)%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%JAVA_HOME%\bin;%CLASSPATH%51Testing软件测试网r(Wi jUw)E(O
注意,环境设置后重启电脑才生效。
[*@0_u6O7s[}0如果知道环境变量是否生效?例如查看ANDROID_HOME环境变量的设置,开始->运行->cmd,在cmd下面输入echo % ANDROID_HOME%,如果与我们预期的一致就说明生效了。如果原样输出% ANDROID_HOME%就说明环境变量未生效,需要重启操作系统。
W%\6G2eT1p/s0详细说明如下
!_2BJ0yE5@01.1 ANDROID_HOME51Testing软件测试网d8VR$M5xRQ(b"P
ANDROID_HOME= D:\Android\android-sdks,指定sdk包含的位置,什么是sdk?网上去搜,简单点说就是里面要包含AVD Manager和SDK Manager:51Testing软件测试网r+k-g3{!Q,AaP U
同时,eclipse也要设置SDK的位置,最好和ANDROID_HOME设置一样,如下
t)pCdL2{X)FPG0
bwbBJ0
6G
@U~pb]qW051Testing软件测试网\9m/FYS|3[;|)__~x
1.2 ANDROID_SDK_HOME51Testing软件测试网)Y W gy y5_6@0y$t
ANDROID_SDK_HOME设置的是avd的路径,一般默认在用户路径下,例如C:\Users\tanggod\.android, SD卡的空间都是从这里分配的。可以挪到其他目录下,需要在环境变量里面设置如下:
9O#JBxw*V0ANDROID_SDK_HOME=D:\Android\avd51Testing软件测试网X2L*e d]ZRAlr
如此设置后(重启电脑让环境变量生效 ),以后创建的AVD就会在我们指定的目录下了:51Testing软件测试网3e4e n EIZ
51Testing软件测试网/]xL Y5pD(lx
P\9@1y$|l8J01.3 JAVA_HOME
JDK,JAVA_HOME必须设置jdk安装的目录,例如:
K[!xq,hfzD4EP0JAVA_HOME= C:\Program Files\Java\jdk1.7.0_05
(u kZ(Mu"B HU0C:\Program Files\Java\jdk1.7.0_0551Testing软件测试网(i0Ta ?$fC,VW#E4E(bhR
查看JDK版本号?在cmd下面输入:Java -version
U1G%Lw)ly u0Nd@E0
jJM*S7Xn o#RW051Testing软件测试网4n0}:@BIou+w8~x
PS:1.7的jdk似乎还很不稳定,有问题,建议用1.6的。51Testing软件测试网G(y0t!q'm6L d
jdk下载位置:
gBSU3M6@0http://www.oracle.com/technetwork/java/javase/downloads/index.html51Testing软件测试网8t8wV,m9T
1.4 CLASSPATH51Testing软件测试网$X*b I*PR6A(b
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 51Testing软件测试网!C\4x3Q&rdnR
变量名:classpath
+xC)FJg}Glg0 变量值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;(注意,CLASSPATH最前面是有个“.”的,表示当前目录,这样当我们运行java AClass的时候,系统就会先在当前目录寻找AClass文件了。);51Testing软件测试网Z5DqM8?;uNl
1.5 PATH
环境变量PATH设置的时候,注意是追加,不能将已有的内容清空了。51Testing软件测试网0Y3R&Ij$id3JQN
PATH = %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%JAVA_HOME%\bin;%CLASSPATH%51Testing软件测试网 nIrhM:Q:B
主要设置的是adb.exe和emulator的位置(在tools或者platform-tools目录中),已经jdk工具的路径等等。
i0Pe9m j _8O02. 如何签名Sign
Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!51Testing软件测试网:U3M4BS8@4Ma_-E
为了方便我们开发调试程序,ADT会自动的使用debug密钥为应用程序签名。debug密钥?它在哪?debug密钥是一个名为debug.keystore的文件,它的位置: Ubuntu: ~/.android/debug.keystore (win7:c:/user/.Android/debug.keystore; xp: C:/Documents and Settings/user/.Android/debug.keystore),“user”对应于你自己的windows操作系统用户名,这也就意味着,如果我们想拥有自己的签名,而不是让ADT帮我们签名的话,我们也要有一个属于自己的密钥文件(*.keystore)51Testing软件测试网:V~C7m6j$x
用Robotium做黑盒测试的时候,需要对待测试的apk去除签名,然后自己再签名。google网站上有个签名工具叫做re-sign.jar,比较傻瓜化,直接将apk拖入到re-sign.jar中后自动去除签名,重新再签名;很多人都建议用这个工具。我刚开始也用这个,可是发现用这个工具处理后,无论是android模拟器还是真机,都装不上,提示没有签名。
X}2J$mcZ"y+af!O$B0我将apk解开看,确实是有签名的。
(y-Y2b+O4k5T&~n|0查看签名:
)~%kM+Tu0jarsigner -verify -verbose -certs D:\Android\apk\02-AndroidCalculator-sign.apk
+n^tI E W2d0-X\,o`U'e#S5z!kO`;f0
所以后来,我就手工用命令行来签名。手工签名之前,首先需要去除原来签名的信息,去除方法很简单。就是将apk文件后缀改为.zip,然后从winrar中删除META-INF文件夹,删除后重新将文件名改成apk的后缀,这样就去除签名了。然后用下面的命令进行签名。
c!E+t(B _~o1JQ0注意下面黄色高亮和灰色高亮的字,需要根据自己的debug.keystore的位置,和待签名apk的位置进行设置。 51Testing软件测试网9VG6EdSM&@
签名AndroidCalculator
TjB{.dk4w0> jarsigner -keystore D:\Android\avd\.android\debug.keystore -storepass android -keypass android D:\Android\apk\02-AndroidCalculator-unsign.apk androiddebugkey
8N imFa IBl#?X~0> zipalign 4 D:\Android\apk\02-AndroidCalculator-unsign.apk D:\Android\apk\02-AndroidCalculator-sign.apk
9Ks sz@OS9FH0zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值)51Testing软件测试网R-UR'b@
例如签名Plingm
+lXl"|v+]-N |0>jarsigner -keystore D:\Android\avd\.android\debug.keystore -storepass android -keypass android D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkandroiddebugkey51Testing软件测试网,XPQ'e.Ir _)|%E3[
> zipalign 4 D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk
El0SCu0对于jdk 1.7版本,签名稍有区别,需要加上参数:-digestalg SHA1 -sigalg MD5withRSA,例如
*fjb t,A0b]3w4yj#k051Testing软件测试网2D^h[#M1@H
>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.apkandroiddebugkey51Testing软件测试网;ut6};P-[i"c4u
> zipalign 4 D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk51Testing软件测试网b9R,T!iq yHGO
签名后如何安装到模拟器中?命令如下
Fw-e9F\[0>emulator -avd android4.1
;y!O6G)~0b ^(b%K0>adb install D:\Android\apk\plingm\com.freephoo.android_1180-sign.apk51Testing软件测试网8eD Tt}!q
如果是安装到真机中,就不需要上面第一条命令启动模拟器了,直接usb连接上手机,执行adb install即可。
a WH2wGI^5G@7ri T0+u5?}YbT.JS#NC&p0
在进行黑盒测试之前,需要知道待测试apk的包及activity信息。查看某个apk的package name,可以用aapt看:51Testing软件测试网5^%Mj L'Jp!S-m1O
在platform-tools目录下使用如下命令:aapt dump badging XXX.apk51Testing软件测试网|V3Vhf"li
aapt dump badgingD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk
J-m!UaO/o0也可以用re-sign.jar看,结果如下:package: name='com.freephoo.android'
x9CE*QL$kFe v03. 真机调试
设置android手机为USB调试模式。步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择【USB调试】
用USB连接手机和电脑,并确保成功。步骤: 在windows下执行c:/adb devices, 查看手机是否已经连接成功。
连接不成功:
P!D%fvE}h%bA0
"X$o%A/u8r~'DBR0连接成功51Testing软件测试网+_!v1W^Lb
51Testing软件测试网9It;d)p7q7@.iv)?J
- 51Testing软件测试网cl ZZ,o-i%]u
设置应用程序为调试模式(这个似乎不要也可以)。操作: 编辑AndroidManifest.xml 增加调试参数android:debuggable="true", 如下:51Testing软件测试网%` U`"QdEt*KVQ
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
o({#j"`A\]0- 51Testing软件测试网d5M V}
w!b
查看具体异常信息:51Testing软件测试网 iC2G uFC(s0q5p~
执行:./adb logcat 可以查看到更多的系统异常消息。在这些消息中要注意查看Caused by:打 头的行,这些行指明了在哪行代码出的错误
Z0E{?2RE \.a04. 已知控件id,如何模拟按键
我们知道,android每个控件都有一个类似R.id.xxxx字符串id。在做白盒测试的时候,将被测试的代码包import一下,直接调用R.id.xxxx就可以了。51Testing软件测试网4p8nlC6i(m(j
但是在黑盒测试的时候,我们只有apk,没有源代码,怎么获取控件的id呢?
8T*U k:t5|0java已经给我们提供了这个工具。只需要在cmd下面输入hierarchyviewer即可调出控件查看工具(如果cmd不认识你的hierarchyviewer,说明你的环境变量没有配置正确):
(Wr2Kpe8B/y!y/U aL0 51Testing软件测试网'v%~$_+^,rwb@
51Testing软件测试网r(ob#vG
选中需要查看的应用,点击:"Load View Hierarchy":51Testing软件测试网:h1J&e$u${T
如下id/后面的"Button01"即为button的id。
-},fa3W%I1Sp^0
H9i"h;IKS051Testing软件测试网c"hT-n3~v
好了,已知控件的id,在Robotium中如何模拟按键呢?这里常用的有2种方法:
yHpj9S}01. 根据button上面的文字。这个很简单,直接solo.clickOnButton("Multiply");即可。
f2v|;_9_G$GpGU02. 根据控件的坐标。hierarchyviewer是可以查看每个点的坐标的。但是使用起来不是很直观,尤其是对不同分辨率屏幕的手机时,使用起来可能还存在兼容性问题。
3U7K)Hk@h X*t2JX051Testing软件测试网 kw:p QP2x@x
如果控件上没有文字,clickOnButton
TAG:
不要让那些真正对你好的人,慢慢的从你的生活中消失,无论爱情还是友情,都需要用心经营。
我的栏目
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | ||||||||
3 | 4 | 5 | 6 | 7 | 8 | 9 | |||
10 | 11 | 12 | 13 | 14 | 15 | 16 | |||
17 | 18 | 19 | 20 | 21 | 22 | 23 | |||
24 | 25 | 26 | 27 | 28 | 29 | 30 | |||
31 |
我的存档
数据统计
- 访问量: 3334413
- 日志数: 1640
- 建立时间: 2011-12-07
- 更新时间: 2019-12-24