51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1698|回复: 0
打印 上一主题 下一主题

robotium—只有apk文件的测试(下)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2015-3-2 14:01:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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上。

如果不重签名的话,我们用官方提供的原apk包和自己后来生成的testapk包安装,用testapk包对原apk包进行测试,就会出现以下错误提示:

二、安装已经重签名的待测试的apk文件到安卓手机
直接用adb install 待测试的apk(拖到cmd里面即可),之后enter,安装成功即可

三、Robotium的testcase的编写配置(在eclipse下进行)

1、创建Android Test Project
(1)File-New-Project-Android-Android Test Project
(2)输入工程名-next,选择This project-finish

2、创建Anroid testcase(包括uiatumatorviewer的使用,这个得在17及以上才有吧。。。)

使用uiautomatorviewer获取待测程序的布局,具体可将该工具的路径添加到环境变量中,或者进入该目录,用cmd运行,直接输入uiautomatorviewer就可以运行起来该工具,这是已经封装好的工具,可以直接用。。。
创建testcase的具体过程如下:
(1)工程名-src-包名-右击new-Junit Test Case
(2)在name一栏输入Test Case的名称,比如TestNotePad
(3)Superclass一栏,选择android.test.ActivityInstrumentationTestCase2,之后选择setup,teardown,constructor方法,点击finish即可

3、导入Robotium-jar包(需要注意和需要配置的项目)

通过建立lib文件夹,直接copy文件,需要在Build Path中进行配置。。。。具体步骤与下面添加report-jar包的步骤相同
(1)工程名-new-folder-lib
(2)直接将之前下载的robotium-solo-5.2.1.jar拷贝粘贴到lib目录下
(3)工程名-右击-Build Path-Configure Build Path-Libraries-Add External JARs
4)点击右边的Order and Export,选择Robotium-solo-5.2.1.jar的选项,点击OK
4、修改AndroidManifest.xml文件
该配置文件的修改主要包含增加<Instrumentation>节点
<instrumentation
        android:name="android.test.InstrumentationTestRunner"

        android:targetPackage="xxx.xxx.xxx" />

targetPackage与re-sign.jar中所获取到的包名相同,是指被测程序的包名

5、编写测试代码



四、跑case:

可以全部跑,也可以单个跑;可以在eclipse中操作,也可以在cmd下直接用命令行方式操作:

(1)可以用adt工具,从eclipse里直接操作:运行所有用例——如果使用了TestSuite对用例进行一定顺序的处理,就可以在该类中添加你所需要的所有用例,然后在这个类文件上,右键Run as Android Junit Test;运行单个用例——可以直接在某个test的类文件上,右键Run as Android Junit Test,就能够只跑你想要跑的这个类

(2)在cmd下直接用命令行方式操作:

adb shell am instrument -w com.example.test/android.test.InstrumentationTestRunner

参数说明:

-w是必写的,否则看不到测试结果的。。。

com.example.test——为testapk的包名,android.test.InstrumentationTestRunner是AndroidManifest.xml中所配置的

<instrumentation
android:name="android.test.InstrumentationTestRunner"/>的android:name相同即可,即通过什么来启动这个这个测试

如果在程序中导入了report-jar包,那么修改了AndroidManifest.xml中所配置的内容如下:

<instrumentation
android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"/>

就需要修改这个cmd命令为:adb shell am instrument -w com.example.test/com.zutubi.android.junitreport.JUnitReportTestRunner

五、配置report-jar包,直接在手机上生成所需要的xml的测试运行结果

导入这个jar包,就可以不用依赖eclipse了,将程序启动起来后,就可以关闭eclipse,等待程序跑完,就可以在特定位置获取程序运行结果,具体导入步骤见下方:

有现成的jar包可以帮忙完成这个操作,名字是android-junit-report-1.5.8.jar

下载官网:https://github.com/jsankey/android-junit-report     https://github.com/jsankey/android-junit-report/downloads



然后下载完成之后,需要把这个jar添加到我的test工程的lib文件夹下,然后将其添加到build-path中

具体过程如下:

1、建立一个安卓的测试工程,导入Robotium包,建立好测试用例

2、在测试工程的lib目录下,复制android-junit-report-1.5.8.jar包,可以直接将jar包拖入到工程的lib文件下,松开鼠标,之后会提示是否要copy files,点击确定即可

3、右键该jar包——Build Path——Add to Build Path(注意一定要把Libraries和Order and Export下的该jar都勾选上,点击OK)

4、在测试工程的AndroidManifest.xml文件中,修改<instrumentation>的字段的内容,

修改之前的内容是:targetPackage表示待测程序的包名

<instrumentation
android:name="android.test.InstrumentationTestRunner"

android:targetPackage="xxx.xxx.xxx"/>

修改之后的内容是:

<instrumentation
android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"

android:targetPackage="xxx.xxx.xxx"/>

5、右键测试工程——Run As——Run Configuration

之后打开Run Configuration的界面,选择自己的那个工程,右边的Test下面的Instrumentation runners,选择为之前AndroidManifest.xml中配置好的,之后apply,并确认即可

6、运行程序Run AS——Android Junit Test,运行case,之后就会在   /data/data/ com.xxx.xxx/ files 目录下 生成一个文件junit-report.xml:

然后用adb pull可以将手机端的文件拷贝到电脑端:

adb pull /data/data/xxx.xxx.xxx/files/junit-report.xml D:\

参数说明:xxx.xxx.xxx就是targetPackget,即待测程序的包名,这个xml的测试报告生成位置就在这个包的files目录下,注意:不是在testapk的包名下面

D:\ 的参数不添加的话,文件就被pull到当前目录下,如果想要定位一个特定的位置,如D:\

7、之后能够log信息:

这里能够看到运行的是哪个testsuite里面的哪个testcase,然后运行失败的话,就会打出详细的failure message的信息

如果运行成功的话,就没有<failure message>的节点

六、在整个过程中可能遇到的问题:

1、classnotfound的问题(jar包的导入问题,libraries中没有包含进来,MainActivity写错了。。。)

2、crash的问题(没有安装测试包,找不到这个包名的时候应该也会崩溃)
金阳光测试
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 08:04 , Processed in 0.059796 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表