2011.11.1好日子,今天博客访问量超过1000了。 2012.01.29,访问量突破2000了. 2012.02.01,访问量突破3000了.继续进步

安卓自动化测试执行总结以及疑问-Robotium

上一篇 / 下一篇  2011-09-19 01:06:51 / 个人分类:Robotium

经过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的签名方法

  1. Eclipse里编写好测试apk的代码,例如要测试打开信息这个应用,准备发送短信息
  2. 准备Linux系统环境,并配置好Android开发环境(包括SDKJRE、环境变量等);
  3. 下载自动签名脚本
  4.   http://code.google.com/p/robotium/downloads/detail?name=sign-debug-any-apk.sh
  5. Android系统中导出pre-install的应用(例如Mms.apk
  6. adbpull /system/app/Mms.apk
  7. 准备Eclipse的默认签名工具debug.keystore文件;
  8. 将脚本文件、Mms.apkdebug.keystore都拷贝到Linux系统中;
  9. 修改脚本文件,并给它加权(注二);
  10. 在终端中输入命令:
  11. ./sign-debug-any-apk.shMms.apk Mms_signed.apk
  12. 如果一切顺利,此apk应该已经签好名并生成新的文件“Mms_signed.apk”
  13. adb pull /data/system/packages.xml
  14. Openpackages.xml and remove:
  15. <packagename="com.android.Mms">
  16. </package>
  17. Pushpackages.xml back to device: adb push packages.xml /data/system
  18. Renamed“Mms_signed.apk”to “Mms.apk”, then push the apk back to the device: adb push Mms.apk/system/app
  19. 运行Eclipse里的测试代码,顺利的话你就能看到信息这个应用被调用并启动。

注一
‐‐Un-zip the apk file
‐‐Delete the META--INF folder
‐‐Rezip the apkfile
‐‐In Dos prompt /Command prompt
>jarsigner -keystore~/.android/debug.keystore -storepass android -keypass android ApplicationToTest.apkandroiddebugkey
> zipalign 4 ApplicationToTest.apkTempApplicationToT
est.apk
注二

  1. #!/bin/bash
  2. set -e
  3. ORIGINAL_APK="$(readlink --canonicalize $1)"
  4. CLEAN_SIGNED_APK="$(mktemp -t robotium.clean.apk.XXXXXXXXXXXXXX)"
  5. UNPACK_DIRECTORY="$(mktemp --directory -t robotium.unpack.XXXXXXXXXXXXXX)"
  6. ZIPALIGNED_APK="$(readlink --canonicalize $2)"
  7. PWD="$(pwd)"
  8. if [ -e "$ORIGINAL_APK" ]; then
  9.   if [ "$2" == "" ]; then
  10.       echo "Second argument must be the output filename for the signed apk."
  11.       exit 2
  12.   fi
  13.   rm "$CLEAN_SIGNED_APK" 2>/dev/null || true
  14.   rm "$ZIPALIGNED_APK" 2>/dev/null || true
  15.   cd "$UNPACK_DIRECTORY"
  16.   jar xf "$ORIGINAL_APK"
  17.   rm META-INF/CERT.*
  18.   jar cf "$CLEAN_SIGNED_APK" .
  19.   jarsigner -keystore这里是你的debug.keystore存放路径-storepass android -keypass android "$CLEAN_SIGNED_APK" androiddebugkey
  20.   zipalign 4 "$CLEAN_SIGNED_APK" "$ZIPALIGNED_APK"
  21. else
  22.   echo "First argument must be an apk file."
  23.   exit 1
  24. fi

但是有一个问题,以上用到的一个sh文件中,他有一行代码用到了MKTEMP -T这个关键字,很多类似安卓下的linux环境是会报错的,我手头上暂时没有能够支持该命令(-T选项)linux系统.所以这里遗留几个问题:

1.      测试工程apk与被测apk的签名相同了,是否每次启动的时候都要对该签名进行重新签名,安卓手机里面有没保存?

2.   我上面提到MKTEMP的关键字是否是因为我的linux系统的问题?还是说有别的解决方法?

 

不过最后总结,因为安卓自动化测试是一个非常新和较少经验共享的领域,所以我后续等项目自动化模式成熟之后会多上google和国外网站上面学习,争取10月中旬能够攻我工作设计的apk自动化任务.

 

 

 


TAG:

引用 删除 Allen_YuHao   /   2012-12-10 17:42:24
目前正在研究中,是否有机会,建立1个“Robotium的讨论群”,方便大家在QQ上一同讨论
zxhsr的个人空间 引用 删除 zxhsr   /   2011-12-06 10:34:10
顶一个,目前正在研究中
散步的SUN的个人空间 引用 删除 散步的SUN   /   2011-09-19 15:47:43
呵呵,顶一个,我也在研究这方面的东西
 

评分:0

我来说两句

acbennn

acbennn

站在云端看浮云,晕. CSDN的博客:http://blog.csdn.net/bullswu/article/details/6798437

日历

« 2024-04-30  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 60207
  • 日志数: 44
  • 建立时间: 2011-09-18
  • 更新时间: 2013-09-22

RSS订阅

Open Toolbar