robotium环境搭建
博客Melon麦东=原创内容
1、基于无源码apk测试工程的搭建
2、基于有源码的测试工程搭建
3、遇到的问题(各种刨坑,各种尝试,网上水货回答真的太多,希望看见此文的同学你们是幸运的)
前言:
研究robotium,确切的说研究Android自动化已经很久了,从理论层面上基本将百度能搜索到的框架都了解过一遍,例如Robotium,MonkeyRunner,Appium,cafe等等,但由于其他工作要忙,一直没有机会将领略到的,踩过的坑总结成文字。
正文:
1、基于无源码apk测试工程的搭建
1.1)准备工作:
robotium jar包文件:robotium-solo-5.5.3.jar,robotium-solo-5.5.3-javadoc.jar(好人链 接:http://pan.baidu.com/s/1nvxvcsL,附github路径:https://github.com/robotiumtech/robotium,各种版本任意下载)
就以上两个准备环节在后续都会产生出一些问题,但大家不必惊慌,本人都会提高精确解决方案
1.2)动手实干
A、重签名
利用re-sign.jar将需要测试的apk重新签名(为什么需要重签名,细节可以百度查询,大概原理就是需要保持测试程序和被测程序属于同一个进程),签名手法如下:
双击运行re-sign.jar,会出现如下程序界面:
根据字面意思,也就是需要将待测apk拖动到此界面完成apk的重签名,拖入后会弹出一个保存重签名成功后apk的存放地址,这个直接点击确认即可,会保存在原apk路径下,只是在原apk文件名称上多出了debug字样,如下
到此,重签名完成。(此处签名可能会出现两个问题,后面问题汇总时再给大家说解决方法。如果你此时已经遇到,可以直接跳至后文查找解决方案)
B、测试工程创建
默认你已经拥有eclipse并且搭建好Android开发环境(相关步骤省略了,详细可以看百度,大概也就是三步:eclipse官方下载,ADT下载并安装(这是个eclipse开发Android的插件),Android SDK下载(建议只下载一个版本,选择4.x的版本,5.0的以上暂时不建议下载,后续调试可用))
第一步:创建Android application project,一路随意取名,但最好还是有点寓意,此项目没什么实质用处,截几个步骤图如下:
选择Android application project
创建application 相关信息,例如项目名称,项目运行的sdk版本,如下
注:Minimum Required SDK最好选择4.x,不然会默认在项目创建时创建android-support-v7这个依赖包
到此接下来的步骤都是next,一直到finish结束,即创建完成Android application project,在eclipse项目视图中查看
第二步:创建Android test project,步骤截图如下:
选择Android test project,如下:
输入测试项目名称,如下:
选择this project,如下:
select build target,选择运行的SDK版本号,选择你SKD下载最全的即刻,选择4.x,如下
finish的,完成创建
以下是我创建完完整的Android test project目录(被我遮掉的是刚创建完成时并不存在的,是后面步骤完成后才有的)
C、Robotium jar包导入
第一步:建立libs文件夹(也可以直接引入,但建立一个libs有利用工程管理)
选中测试项目TencentNewsTest 右键 new-folder,取名libs
第二步:将Robotium包拉入copy到此文件夹下,如下图
第三步:检查是否添加依赖
选中测试项目TencentNewsTest 右键 Properties,检查勾选依赖(默认在第二步添加jar包时就自动勾选上了,此步增对单独添加勾选的jar包操作)
D、测试源文件(脚本)编写
完成前面的项目创建和robotium引用,接下来就进入正式的脚本文件编写
第一步:创建源文件,以上面例子继续,创建类名为TencentNewsClientTest的java文件,如下
源码内容如下:
package com.example.tencentnews.test;
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
import com.robotium.solo.Solo;
@SuppressWarnings("rawtypes")
public class TencentNewsClientTest extends ActivityInstrumentationTestCase2{
//实例化一个Solo对象,Solo封装了所有robotium可用方法
private Solo solo;
//添加logcat tag,方便调试程序,查看运行情况
private static String log_tag = "RobotiumTest--";
//以下常量来之被测apk的包名和启动方法名,在re-sign.jar重命名成功时弹出的提示框已显示,也可以用apktool dump badgin apk路径来获取
private static String PACKNAME = "com.tencent.news";
private static String MAINACTIVITY = "com.tencent.news.activity.SplashActivity";
//定义class类型的常量,用于ActivityInstrumentationTestCase2加载启动被测程序
private static Class<?> launchActivityClass;
static{
try {
launchActivityClass = Class.forName(MAINACTIVITY);
} catch (Exception e) {
// TODO: handle exception
throw new RuntimeException(e);
}
}
/**
* 构造函数,super参数可以单独为launchActivityClass,也可以添加上packagename,实测都可以运行成功
* 网上大多数教程都提到此构造,使用方式雷同下面,实测仅launchActivityClass也是可以的
*/
@SuppressWarnings({ "unchecked", "deprecation" })
public TencentNewsClientTest(){
//super(PACKNAME,TencentNewsClientTest.class);有部分网上贴着为了处理某些问题,提出使用此等方式,亲测表示没用
//super(launchActivityClass);此种写法也可以,亲测可以通过
super(PACKNAME,launchActivityClass);
Log.i(log_tag, "进入构造函数");
}
//初始化solo
public void setUp() throws Exception{
Log.i(log_tag, "初始化solo");
solo = new Solo(getInstrumentation(),getActivity());
Log.i(log_tag, "初始solo完毕");
solo.sleep(10000);
}
//测试用例集合
public void test1(){
solo.sleep(20000);
Log.i(log_tag, "进入测试程序");
solo.clickOnText("娱乐");
}
//测试完成清空测试环境
public void tearDown() throws Exception{
solo.finishOpenedActivities();
Log.i(log_tag, "结束测试,清空环境");
}
}
第二步:修改AndroidManifest.xml内容
本文件,切记只需修改一处,无需理会网上大部分网友的建议,胡乱修改
将标注部分的包名更改为被测apk的包名,可直接拷贝第一步源码中定义的常量包名
到此为止,即可运行测试项目,项目右键-Run As-Android Junit Test,即可看见如下运行内容,表示成功:
若以上内容完全按照步骤进行,应该都能成功,到此为止,第一个基于无源码的Android Robotium测试工程即完成,更深一步的学习,则都在源码中实现了,继续学习和研究Robotium
2、基于有源码的测试工程搭建
1.1)准备工作
由于是基于源码的,所以此处准备则无需re-sign.jar
但仍然需要robotium jar包,获取请查看上文(robotium-solo-5.5.3.jar,robotium-solo-5.5.3-javadoc.jar(好人链 接:http://pan.baidu.com/s/1nvxvcsL,附github路径:https://github.com/robotiumtech/robotium,各种版本任意下载))
1.2)动手实干
A、由于无重签步骤,则直接进入到测试工程创建
步骤雷同无源码工程,只不过在其中一部有所变动,如下:
此处选择需要测试的对应源码项目,next后续步骤一样
B、Robotium jar包导入
和无源码导入方式和步骤一样,请参考上文
C、测试源文件(脚本)编写
源码可以借鉴官方的例子,我就不贴出来了,提供下载地址,涵盖项目源文件和测试项目源文件(好人链接:http://pan.baidu.com/s/1nvxvcsL)
3、遇到的问题(各种刨坑,各种尝试,网上水货回答真的太多,希望看见此文的同学你们是幸运的)
1.1)re-segn.jar重签名失败
原因一:检查Android SDK ./tools文件夹中是否有zipalign.exe,如果没有则会报错,将其拷贝到./tools下即可
原因二:文件本身反签名太强大了,放弃吧,直接找开发拿签名文件吧
1.2)创建Android test project报错
此报错的情况的大多同行基本都是按照网上的针对apk创建测试项目的方法进行,在eclipse中无任何项目的情况下,选择创建Android test project,并且选择this project,基本都会报空的错误,且创建成功的文件结构会缺失很多东西。
解决方法:完全按照博主的做法,先创建一个Android application project,然后再创建 Android test project,则可以不报错了
1.3)导入robotium源码进行开发报错
一般在实际开发脚本中,为了很友好的调试程序,引入的都是robotium的源码文件,导入源码后常见以下两点错误:
solo对象无法识别,导致原因:导入源码时包名错误,将源码架包更改为com.robotium.solo,把源码全放到此结构下
找不到android.support.v4,解决方法从build path Libraries中add Exernal jars选择手动加入android-support-v4.jar
1.4)提示Installation error: I NSTALL_FAILED_VERSION_DOWNGRADE
解决方法一:检查AndroidManifest.xml中android:targetPackage=“”中填写正确了被测应用的包名
解决方案二:更换手机,或者重启下eclipse和手机,重启adb链接(没办法,的确用这样的方式解决过此类报错)
误区:不要相信网上说的什么提高version code版本,没啥用处,亲测无效
1.5)提示Test run failed: Instrumentation run failed due to 'java.lang.RuntimeException'
解决方案一:此处提示的意思是有重复引用的jar包或者其他地方存在重用的地方,检查build path中的依赖是否存在重复,我犯过的错就是在引用了robotium的jar文件情况下,还勾选上了android-support-v4.jar,导致一直报错,后来删掉了android-support-v4.jar就可以了
误区:网上出现类似以下修复方案,都是无效
1、导入junit4依赖包(无效,不导入也可以正常运行)
2、更改AndroidManifest.xml中的targeversion值(无效)
3、更改构造函数的参数(虽然有效,不会抛这样的错误,但是会报另外一个启动项的错误,一直无解)
1.6)提示Instrumentation run failed due to'java.lang.ClassNoFoundException'
解决方案一:检查源码中应用的启动项填写是否正确

浙公网安备 33010602011771号