经过4周左右时间摸索和实践,android的自动化算是完成了用例的任务了,在这个过程中遇到很多困难和尝试很多方案,对比wed自动化,终端产品的自动化算是比较新鲜同时不成熟,但是也算是一个成长的乐趣.
首先,由于我开始进行自动化测试的是公司开发的apk,所以有源代码且编译是没问题的,所以能够在这个基础上作为第一个Robotium自动化项目.首先我们通过eclipse创建测试项目,连接上被测的源代码工程.然后就可以很简单的编写用例了:
Package被测对象包;
Importandroid.test.ActivityInstrumentationTestCase2;
Importcom.liliandroid.helloworld.ActivityMain;
Importcom.jayway.android.robotium.solo.Solo;
PublicclassUITextTestextendsActivityInstrumentationTestCase2<ActivityMain>{
Private Solo solo;
Public UITextTest() {
super("需要继承的被测对象的东东", ActivityMain.class);
}
Public void setUp()throws Exception {
solo=newSolo(getInstrumentation(), getActivity());
}
Publicvoid 测试用例testcase()throwsException {
}
以上这步其实我相信很多做自动化测试的人已经都能够正常跑起来,但是困难点来了,假如我们想通过只有apk不要源代码的情况下执行用例的话,我们就要做许多操作了.通过我几个星期的摸索,首先我们需到这里下载一个关于创建测试的工程:
http://robotium.googlecode.com/files/RobotiumForBeginners.pdf
关键点来了,这个工程中所有步骤都顺利,但是关于重新签名的这个地方暂时我还没看到相关同学解决掉,所以我就换了另外一个方式去解决签名问题,此方法通过网上的重新签名的一些共享来执行的(这里不建议自己创建签名,因为容易会对测试的apk有功能上的影响,以下是一些网上重新签名的方法):
pre-install apk的签名方法:
注一:
‐‐Un-zip the apk file
‐‐Delete the META--‐INF folder
‐‐Re‐zip the apkfile
‐‐In Dos prompt /Command prompt
>jarsigner -keystore~/.android/debug.keystore -storepass android -keypass android ApplicationToTest.apkandroiddebugkey
> zipalign 4 ApplicationToTest.apkTempApplicationToTest.apk
注二:
但是有一个问题,以上用到的一个sh文件中,他有一行代码用到了MKTEMP -T这个关键字,很多类似安卓下的linux环境是会报错的,我手头上暂时没有能够支持该命令(-T选项)的linux系统.所以这里遗留几个问题:
1. 测试工程apk与被测apk的签名相同了,是否每次启动的时候都要对该签名进行重新签名,安卓手机里面有没保存?
2. 我上面提到MKTEMP的关键字是否是因为我的linux系统的问题?还是说有别的解决方法?
不过最后总结,因为安卓自动化测试是一个非常新和较少经验共享的领域,所以我后续等项目自动化模式成熟之后会多上google和国外网站上面学习,争取10月中旬能够攻我工作设计的apk自动化任务.