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

上一篇 / 下一篇  2015-07-17 14:44:39 / 个人分类:Robotium

V|+] X(CA Fr0目录[-]

!E^V:A f0a;t"y9oPD0
  • 1. 需要设置的环境变量
  • 1.5         PATH
  • 2.   如何签名Sign
  • 3.   真机调试
  •   设置android手机为USB调试模式。步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择【USB调试】 
  • 用USB连接手机和电脑,并确保成功。步骤: 在windows下执行c:/adb devices, 查看手机是否已经连接成功。
  • 4.   已知控件id,如何模拟按键
  • Keyword:Android,Robotium自动化测试黑盒测试,已知id如何模拟按键

    ];h kt5u/Zb0

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

    E+Y@$eQO;k-_0

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

    o M2Jo3b^/l c0

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

    w W4W&K$}z })eF0

    1. 需要设置的环境变量

    ANDROID_HOME=D:\Android\android-sdks51Testing软件测试网rUh#U7c

    ANDROID_SDK_HOME=D:\Android\avd51Testing软件测试网2jEu [J#FL

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

    }rMAL9[L0d0

    CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;51Testing软件测试网|^n'F.vT{prb

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

    6p.A~(_']mI }Y0

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

    )Y#H |U+sTBi0

    如果知道环境变量是否生效?例如查看ANDROID_HOME环境变量的设置,开始->运行->cmd,在cmd下面输入echo % ANDROID_HOME%,如果与我们预期的一致就说明生效了。如果原样输出% ANDROID_HOME%就说明环境变量未生效,需要重启操作系统51Testing软件测试网8O m:qzh$E^Pn{

    详细说明如下51Testing软件测试网W5o_ma*DV6}#b

    1.1         ANDROID_HOME51Testing软件测试网{,`:ym'a+fH

    ANDROID_HOME= D:\Android\android-sdks,指定sdk包含的位置,什么是sdk?网上去搜,简单点说就是里面要包含AVD ManagerSDK Manager:51Testing软件测试网5rdk4E+W)S1L]k

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

    -Wd;?} z9s;L0

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

    @K`-dg0

    Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】51Testing软件测试网F)E7bp [_!E

    !o$D7D Q6r0

    B%|f l\+_u0

    1.2         ANDROID_SDK_HOME

    m]E.Sz+yUr'G0

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

    8?m7Dp M m*OYP0

    ANDROID_SDK_HOME=D:\Android\avd51Testing软件测试网EJ Oa#P DQ

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

    3eY2wwg;Nc7G@0

    Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】51Testing软件测试网{ [ ?;]8}1N1iK(E
    51Testing软件测试网7p/s"Pj%o
    1.3         JAVA_HOME

    :b9m4[#YuoWW?&?AY!y0

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

    %HG8Fb:FIE;C0

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

    ^$~5g L],E1L0

    C:\Program Files\Java\jdk1.7.0_0551Testing软件测试网,m4BwS,CN X"R

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

    z T{|:p;yj)q8{0

     Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】
    lsJz O@ gF051Testing软件测试网gW5[7kv
    PS:1.7jdk似乎还很不稳定,有问题,建议用1.6的。

    zxA7Q4xB(rLJ4c0

    jdk下载位置:51Testing软件测试网 Zx5S:s9d t._b-b\Uv U s

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

    F}s[\%H0

     1.4         CLASSPATH

    M0y/Tz.z-`H0

    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软件测试网R$z1U ^!tD8I
             
    变量名:
    classpath 
    1C i+v?6xd?0         
    变量值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;(注意,CLASSPATH最前面是有个“.”的,表示当前目录,这样当我们运行java AClass的时候,系统就会先在当前目录寻找AClass文件了。);

    d.n'J?/P7KB8^)?0

    1.5         PATH

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

    ]i]IqSag0

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

    vz~1f0E7eK0

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

    yni"A"p0x:Yce"T0

    2.   如何签名Sign

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

    #_Y!K0me2~8Ix0

    为了方便我们开发调试程序,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

    |3z s3~6Y0

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

    5X?m6ynr4k/e@0

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

    4J}oyL"z$X[f*O0

    查看签名:

    o PdX|*AR1d;s]0

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

    {j I)h[ jA$g0

     51Testing软件测试网,]Li:V8v(}%Y ?:X

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

    注意下面黄色高亮和灰色高亮的字,需要根据自己的debug.keystore的位置,和待签名apk的位置进行设置。 51Testing软件测试网a5W&z,U5G&X"}3N

    签名AndroidCalculator51Testing软件测试网*do}'Ofl:b)i8W"},Q

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

    A x(b `$cUd{X/P0

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

    u] zH H!~0

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

    P1b d+u9b\|s0

    例如签名Plingm

    7`T n;SIl0

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

    0o2X%@4tmG0

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

    F4i^6Ag c ]\Z0

     对于jdk 1.7版本,签名稍有区别,需要加上参数:-digestalg SHA1 -sigalg MD5withRSA,例如51Testing软件测试网6Pc?2?-AN`)]m [

     51Testing软件测试网z.Fm|a

    >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软件测试网 S1W.x!XPO

    > zipalign 4 D:\Android\apk\plingm\com.freephoo.android_1180-unsign.apkD:\Android\apk\plingm\com.freephoo.android_1180-sign.apk51Testing软件测试网^;t3{?S:L;RG%N~I

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

    &j-B[ BW0v0

    >emulator -avd android4.151Testing软件测试网@6R#bXv1L

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

    s0[(Q4A&d{0

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

    "}y(jk2zI\0[n%L0

     51Testing软件测试网p VaP1u|Ox

    在进行黑盒测试之前,需要知道待测试apk的包及activity信息。查看某个apkpackage name,可以用aapt看:51Testing软件测试网1\`L [J'Ev

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

    t+AJ,_ {4O F2v0

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

    #DQ4@-_v[r0

     也可以用re-sign.jar看,结果如下:package: name='com.freephoo.android'51Testing软件测试网6OR)d\8G8s?

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

    8[(iv`'OZ|.h4RD0

    3.   真机调试

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

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

    连接不成功:

    8t1\!e"A,{.i'}W?(p2h0

    Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】
    uYE3ha0a0连接成功51Testing软件测试网C0I*QjzR
    Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】

    "wU*v4?;B#}9r]u7d0
    • 51Testing软件测试网0fb | ])D,~

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

      "Y:o?nI9j%h0

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

    &oA3a%lsi6z8{0
    • 51Testing软件测试网9rRf[#l EH-b_

      查看具体异常信息:51Testing软件测试网A G'UV/U V!R

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

    u9`(~ O!I-mm0

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

    我们知道,android每个控件都有一个类似R.id.xxxx字符串id。在做白盒测试的时候,将被测试的代码包import一下,直接调用R.id.xxxx就可以了。51Testing软件测试网6I7a!j~a6TX:_

    但是在黑盒测试的时候,我们只有apk,没有源代码,怎么获取控件的id呢?51Testing软件测试网g1F!X sV

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

    \'C.mB s_K_0

     Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】51Testing软件测试网9M%cX K7}V-lP
    51Testing软件测试网 FQ5Tq:@

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

    E'S` hL(i4R1q$y0

    如下id/后面的"Button01"即为buttonid
    3K4K0Eg'WVa0
    Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】51Testing软件测试网 KFM~1?K@
    51Testing软件测试网6|9h_^4i0cv

    51Testing软件测试网wy[6^;fE%M&?

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

    kl&^I9XM \ld0

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

    yXk$kr @M0

    2. 根据控件的坐标。hierarchyviewer是可以查看每个点的坐标的。但是使用起来不是很直观,尤其是对不同分辨率屏幕的手机时,使用起来可能还存在兼容性问题。51Testing软件测试网U Y&f"o;K

     51Testing软件测试网.s*R_8@wsl,r:])n;h

    如果控件上没有文字,clickOnButton

    TAG:

     

    评分:0

    我来说两句

    Open Toolbar