Robotium自动化测试之签名

来源:互联网 发布:淘宝内衣店铺名字大全 编辑:程序博客网 时间:2024/05/16 15:19

背景:
最近在做Android自动化的技术预研,最后决定选择Robotium这个框架,主要是看重这个框架最新的版本能够测试webview。Robotium进行自动化有两种模式可以选择,一个是基于源码,一个是基于Apk。基于Apk测试的话,需要对被测程序进行重签名。

什么是应用签名?
详细介绍:http://www.cnblogs.com/keke-xiaoxiami/articles/4299619.html

为什么需要重签名?
引用知乎上的一个回答,原文地址:http://www.zhihu.com/question/28466134/answer/40921012

被测程序为什么要进行重签名?
签名的好处:
(1)有利于程序升级。
当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。

(2)有利于程序的模块化设计和开发。
Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。

(3)可以通过权限(permission)的方式在多个程序间共享数据和代码。
Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共享该功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature,则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。

Robotium为什么需要对被测程序进行重签名?

根据上面签名的好处,知道了重签名后能够共享数据和代码,也能够将被测程序与testapk跑在同一个进程中,这样testapk就能够对被测程序进行直接交互。
具体原因见下方描述:
robotium是对Instrumentation做的二次封装,Instrumentation要求待测程序与testapk跑在同一个进程中,而且需要对其进行数据和资源的操作,那么就必须要保证签名一致,就根据上面所说的签名的好处就可以知道,签名是前提和必要条件,否则将无法用testapk对待测程序进行操作和UI上的测试。
Android提供了自定义的运行测试用例的类,叫做InstrumentationTestRunner。这个类控制应用程序处于测试环境中,在同一个进程中运行测试程序和主程序,并且将测试结果输出到合适的地方。IntrumentationTestRunner在运行时对整个测试环境的控制能力的关键是使用Instrumentation。注意,如果你的测试类不使用Instrumentation的话,你也可以使用这个TestRunner。
当你运行一个测试程序时,首先会运行一个系统工具叫做Activity Manager。Activity Manager使用Instrumentation框架来启动和控制TestRunner,这个TestRunner反过来又使用Intrumentation来关闭任何主程序的实例,然后启动测试程序及主程序(同一个进程中)。这就能确保测试程序与主程序间的直接交互。用eclipse编写testcase,编译完测试工程后,你就可以使用系统工具Activity Manager来运行测试程序。你给Activity Manager提供了TestRunner的名(一般是InstrumentationTestRunner,在程序中指定);名包括被测试程序的包名和TestRunner的名(这一点在robotium中也一样,也需要提供,才能够找到你需要测试的程序)。Activity Manager加载并启动你的测试程序,杀死主程序的任何实例,然后在测试程序的同一个进程里加载主程序,然后传递测试程序的第一个测试用例。这个时候,TestRunner会接管这些测试用例,运行里面的每个测试方法,直到所有的方法运行结束。如果你使用Eclipse,结果会在JUnit的面板中显示。如果你使用命令行,将输出到STDOUT上。

如何进行重签名

  1. 通过re-sign.jar工具,进行重签名,使用比较方便,虽然重签名成功了,但是重签名后的应用,安装后,我这边无法启动,所以重点说下后面两种重签名的方式。

  2. 通过命令的方式进行重签名
    2.1 将apk文件的后缀改名为xx.zip,使用winrar打开后,把META-INF文件夹删掉
    这里写图片描述
    2.2 使用如下命令进行重新签名
    jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore .android\debug.keystore(安卓默认签名文件的所在位置)
    -storepass android -keypass android unsign.apk
    (去签名后APK安装包所在的位置 ) androiddebugkey

    这里写图片描述
    2.3 使用zipalign工具优化已签名的apk
    这里写图片描述

  3. 使用Robotium Recorder插件进行重签名,因为Robotium在录制的过程中,会自动对apk进行签名,使用相对其它方式,非常的方便省事。工具安装地址:http://robotium.com/pages/user-guide-android-studio
    这里写图片描述
    这里写图片描述

0 0